]> Git Repo - qemu.git/blob - vl.c
target-i386: add VME to all CPUs
[qemu.git] / vl.c
1 /*
2  * QEMU System Emulator
3  *
4  * Copyright (c) 2003-2008 Fabrice Bellard
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #include <unistd.h>
25 #include <fcntl.h>
26 #include <signal.h>
27 #include <time.h>
28 #include <errno.h>
29 #include <sys/time.h>
30
31 #include "config-host.h"
32
33 #ifdef CONFIG_SECCOMP
34 #include "sysemu/seccomp.h"
35 #endif
36
37 #if defined(CONFIG_VDE)
38 #include <libvdeplug.h>
39 #endif
40
41 #ifdef CONFIG_SDL
42 #if defined(__APPLE__) || defined(main)
43 #include <SDL.h>
44 int qemu_main(int argc, char **argv, char **envp);
45 int main(int argc, char **argv)
46 {
47     return qemu_main(argc, argv, NULL);
48 }
49 #undef main
50 #define main qemu_main
51 #endif
52 #endif /* CONFIG_SDL */
53
54 #ifdef CONFIG_COCOA
55 #undef main
56 #define main qemu_main
57 #endif /* CONFIG_COCOA */
58
59 #include <glib.h>
60
61 #include "qemu/sockets.h"
62 #include "hw/hw.h"
63 #include "hw/boards.h"
64 #include "sysemu/accel.h"
65 #include "hw/usb.h"
66 #include "hw/i386/pc.h"
67 #include "hw/isa/isa.h"
68 #include "hw/bt.h"
69 #include "sysemu/watchdog.h"
70 #include "hw/i386/smbios.h"
71 #include "hw/xen/xen.h"
72 #include "hw/qdev.h"
73 #include "hw/loader.h"
74 #include "monitor/qdev.h"
75 #include "sysemu/bt.h"
76 #include "net/net.h"
77 #include "net/slirp.h"
78 #include "monitor/monitor.h"
79 #include "ui/console.h"
80 #include "sysemu/sysemu.h"
81 #include "exec/gdbstub.h"
82 #include "qemu/timer.h"
83 #include "sysemu/char.h"
84 #include "qemu/bitmap.h"
85 #include "sysemu/blockdev.h"
86 #include "hw/block/block.h"
87 #include "migration/block.h"
88 #include "sysemu/tpm.h"
89 #include "sysemu/dma.h"
90 #include "audio/audio.h"
91 #include "migration/migration.h"
92 #include "sysemu/kvm.h"
93 #include "qapi/qmp/qjson.h"
94 #include "qemu/option.h"
95 #include "qemu/config-file.h"
96 #include "qemu-options.h"
97 #include "qmp-commands.h"
98 #include "qemu/main-loop.h"
99 #ifdef CONFIG_VIRTFS
100 #include "fsdev/qemu-fsdev.h"
101 #endif
102 #include "sysemu/qtest.h"
103
104 #include "disas/disas.h"
105
106
107 #include "slirp/libslirp.h"
108
109 #include "trace.h"
110 #include "trace/control.h"
111 #include "qemu/queue.h"
112 #include "sysemu/cpus.h"
113 #include "sysemu/arch_init.h"
114 #include "qemu/osdep.h"
115
116 #include "ui/qemu-spice.h"
117 #include "qapi/string-input-visitor.h"
118 #include "qapi/opts-visitor.h"
119 #include "qom/object_interfaces.h"
120 #include "qapi-event.h"
121
122 #define DEFAULT_RAM_SIZE 128
123
124 #define MAX_VIRTIO_CONSOLES 1
125 #define MAX_SCLP_CONSOLES 1
126
127 static const char *data_dir[16];
128 static int data_dir_idx;
129 const char *bios_name = NULL;
130 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
131 DisplayType display_type = DT_DEFAULT;
132 static int display_remote;
133 const char* keyboard_layout = NULL;
134 ram_addr_t ram_size;
135 const char *mem_path = NULL;
136 int mem_prealloc = 0; /* force preallocation of physical target memory */
137 bool enable_mlock = false;
138 int nb_nics;
139 NICInfo nd_table[MAX_NICS];
140 int autostart;
141 static int rtc_utc = 1;
142 static int rtc_date_offset = -1; /* -1 means no change */
143 QEMUClockType rtc_clock;
144 int vga_interface_type = VGA_NONE;
145 static int full_screen = 0;
146 static int no_frame = 0;
147 int no_quit = 0;
148 #ifdef CONFIG_GTK
149 static bool grab_on_hover;
150 #endif
151 CharDriverState *serial_hds[MAX_SERIAL_PORTS];
152 CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
153 CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
154 CharDriverState *sclp_hds[MAX_SCLP_CONSOLES];
155 int win2k_install_hack = 0;
156 int singlestep = 0;
157 int smp_cpus = 1;
158 int max_cpus = 0;
159 int smp_cores = 1;
160 int smp_threads = 1;
161 #ifdef CONFIG_VNC
162 const char *vnc_display;
163 #endif
164 int acpi_enabled = 1;
165 int no_hpet = 0;
166 int fd_bootchk = 1;
167 static int no_reboot;
168 int no_shutdown = 0;
169 int cursor_hide = 1;
170 int graphic_rotate = 0;
171 const char *watchdog;
172 QEMUOptionRom option_rom[MAX_OPTION_ROMS];
173 int nb_option_roms;
174 int semihosting_enabled = 0;
175 int old_param = 0;
176 const char *qemu_name;
177 int alt_grab = 0;
178 int ctrl_grab = 0;
179 unsigned int nb_prom_envs = 0;
180 const char *prom_envs[MAX_PROM_ENVS];
181 int boot_menu;
182 bool boot_strict;
183 uint8_t *boot_splash_filedata;
184 size_t boot_splash_filedata_size;
185 uint8_t qemu_extra_params_fw[2];
186
187 int icount_align_option;
188
189 int nb_numa_nodes;
190 int max_numa_nodeid;
191 NodeInfo numa_info[MAX_NODES];
192
193 /* The bytes in qemu_uuid[] are in the order specified by RFC4122, _not_ in the
194  * little-endian "wire format" described in the SMBIOS 2.6 specification.
195  */
196 uint8_t qemu_uuid[16];
197 bool qemu_uuid_set;
198
199 static QEMUBootSetHandler *boot_set_handler;
200 static void *boot_set_opaque;
201
202 static NotifierList exit_notifiers =
203     NOTIFIER_LIST_INITIALIZER(exit_notifiers);
204
205 static NotifierList machine_init_done_notifiers =
206     NOTIFIER_LIST_INITIALIZER(machine_init_done_notifiers);
207
208 bool xen_allowed;
209 uint32_t xen_domid;
210 enum xen_mode xen_mode = XEN_EMULATE;
211
212 static int has_defaults = 1;
213 static int default_serial = 1;
214 static int default_parallel = 1;
215 static int default_virtcon = 1;
216 static int default_sclp = 1;
217 static int default_monitor = 1;
218 static int default_floppy = 1;
219 static int default_cdrom = 1;
220 static int default_sdcard = 1;
221 static int default_vga = 1;
222
223 static struct {
224     const char *driver;
225     int *flag;
226 } default_list[] = {
227     { .driver = "isa-serial",           .flag = &default_serial    },
228     { .driver = "isa-parallel",         .flag = &default_parallel  },
229     { .driver = "isa-fdc",              .flag = &default_floppy    },
230     { .driver = "ide-cd",               .flag = &default_cdrom     },
231     { .driver = "ide-hd",               .flag = &default_cdrom     },
232     { .driver = "ide-drive",            .flag = &default_cdrom     },
233     { .driver = "scsi-cd",              .flag = &default_cdrom     },
234     { .driver = "virtio-serial-pci",    .flag = &default_virtcon   },
235     { .driver = "virtio-serial-s390",   .flag = &default_virtcon   },
236     { .driver = "virtio-serial",        .flag = &default_virtcon   },
237     { .driver = "VGA",                  .flag = &default_vga       },
238     { .driver = "isa-vga",              .flag = &default_vga       },
239     { .driver = "cirrus-vga",           .flag = &default_vga       },
240     { .driver = "isa-cirrus-vga",       .flag = &default_vga       },
241     { .driver = "vmware-svga",          .flag = &default_vga       },
242     { .driver = "qxl-vga",              .flag = &default_vga       },
243 };
244
245 static QemuOptsList qemu_rtc_opts = {
246     .name = "rtc",
247     .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
248     .desc = {
249         {
250             .name = "base",
251             .type = QEMU_OPT_STRING,
252         },{
253             .name = "clock",
254             .type = QEMU_OPT_STRING,
255         },{
256             .name = "driftfix",
257             .type = QEMU_OPT_STRING,
258         },
259         { /* end of list */ }
260     },
261 };
262
263 static QemuOptsList qemu_sandbox_opts = {
264     .name = "sandbox",
265     .implied_opt_name = "enable",
266     .head = QTAILQ_HEAD_INITIALIZER(qemu_sandbox_opts.head),
267     .desc = {
268         {
269             .name = "enable",
270             .type = QEMU_OPT_BOOL,
271         },
272         { /* end of list */ }
273     },
274 };
275
276 static QemuOptsList qemu_trace_opts = {
277     .name = "trace",
278     .implied_opt_name = "trace",
279     .head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
280     .desc = {
281         {
282             .name = "events",
283             .type = QEMU_OPT_STRING,
284         },{
285             .name = "file",
286             .type = QEMU_OPT_STRING,
287         },
288         { /* end of list */ }
289     },
290 };
291
292 static QemuOptsList qemu_option_rom_opts = {
293     .name = "option-rom",
294     .implied_opt_name = "romfile",
295     .head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
296     .desc = {
297         {
298             .name = "bootindex",
299             .type = QEMU_OPT_NUMBER,
300         }, {
301             .name = "romfile",
302             .type = QEMU_OPT_STRING,
303         },
304         { /* end of list */ }
305     },
306 };
307
308 static QemuOptsList qemu_machine_opts = {
309     .name = "machine",
310     .implied_opt_name = "type",
311     .merge_lists = true,
312     .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
313     .desc = {
314         {
315             .name = "type",
316             .type = QEMU_OPT_STRING,
317             .help = "emulated machine"
318         }, {
319             .name = "accel",
320             .type = QEMU_OPT_STRING,
321             .help = "accelerator list",
322         }, {
323             .name = "kernel_irqchip",
324             .type = QEMU_OPT_BOOL,
325             .help = "use KVM in-kernel irqchip",
326         }, {
327             .name = "kvm_shadow_mem",
328             .type = QEMU_OPT_SIZE,
329             .help = "KVM shadow MMU size",
330         }, {
331             .name = "kernel",
332             .type = QEMU_OPT_STRING,
333             .help = "Linux kernel image file",
334         }, {
335             .name = "initrd",
336             .type = QEMU_OPT_STRING,
337             .help = "Linux initial ramdisk file",
338         }, {
339             .name = "append",
340             .type = QEMU_OPT_STRING,
341             .help = "Linux kernel command line",
342         }, {
343             .name = "dtb",
344             .type = QEMU_OPT_STRING,
345             .help = "Linux kernel device tree file",
346         }, {
347             .name = "dumpdtb",
348             .type = QEMU_OPT_STRING,
349             .help = "Dump current dtb to a file and quit",
350         }, {
351             .name = "phandle_start",
352             .type = QEMU_OPT_NUMBER,
353             .help = "The first phandle ID we may generate dynamically",
354         }, {
355             .name = "dt_compatible",
356             .type = QEMU_OPT_STRING,
357             .help = "Overrides the \"compatible\" property of the dt root node",
358         }, {
359             .name = "dump-guest-core",
360             .type = QEMU_OPT_BOOL,
361             .help = "Include guest memory in  a core dump",
362         }, {
363             .name = "mem-merge",
364             .type = QEMU_OPT_BOOL,
365             .help = "enable/disable memory merge support",
366         },{
367             .name = "usb",
368             .type = QEMU_OPT_BOOL,
369             .help = "Set on/off to enable/disable usb",
370         },{
371             .name = "firmware",
372             .type = QEMU_OPT_STRING,
373             .help = "firmware image",
374         },{
375             .name = "kvm-type",
376             .type = QEMU_OPT_STRING,
377             .help = "Specifies the KVM virtualization mode (HV, PR)",
378         },{
379             .name = PC_MACHINE_MAX_RAM_BELOW_4G,
380             .type = QEMU_OPT_SIZE,
381             .help = "maximum ram below the 4G boundary (32bit boundary)",
382         }, {
383             .name = PC_MACHINE_VMPORT,
384             .type = QEMU_OPT_BOOL,
385             .help = "Enable vmport (pc & q35)",
386         },{
387             .name = "iommu",
388             .type = QEMU_OPT_BOOL,
389             .help = "Set on/off to enable/disable Intel IOMMU (VT-d)",
390         },
391         { /* End of list */ }
392     },
393 };
394
395 static QemuOptsList qemu_boot_opts = {
396     .name = "boot-opts",
397     .implied_opt_name = "order",
398     .merge_lists = true,
399     .head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
400     .desc = {
401         {
402             .name = "order",
403             .type = QEMU_OPT_STRING,
404         }, {
405             .name = "once",
406             .type = QEMU_OPT_STRING,
407         }, {
408             .name = "menu",
409             .type = QEMU_OPT_BOOL,
410         }, {
411             .name = "splash",
412             .type = QEMU_OPT_STRING,
413         }, {
414             .name = "splash-time",
415             .type = QEMU_OPT_STRING,
416         }, {
417             .name = "reboot-timeout",
418             .type = QEMU_OPT_STRING,
419         }, {
420             .name = "strict",
421             .type = QEMU_OPT_BOOL,
422         },
423         { /*End of list */ }
424     },
425 };
426
427 static QemuOptsList qemu_add_fd_opts = {
428     .name = "add-fd",
429     .head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
430     .desc = {
431         {
432             .name = "fd",
433             .type = QEMU_OPT_NUMBER,
434             .help = "file descriptor of which a duplicate is added to fd set",
435         },{
436             .name = "set",
437             .type = QEMU_OPT_NUMBER,
438             .help = "ID of the fd set to add fd to",
439         },{
440             .name = "opaque",
441             .type = QEMU_OPT_STRING,
442             .help = "free-form string used to describe fd",
443         },
444         { /* end of list */ }
445     },
446 };
447
448 static QemuOptsList qemu_object_opts = {
449     .name = "object",
450     .implied_opt_name = "qom-type",
451     .head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
452     .desc = {
453         { }
454     },
455 };
456
457 static QemuOptsList qemu_tpmdev_opts = {
458     .name = "tpmdev",
459     .implied_opt_name = "type",
460     .head = QTAILQ_HEAD_INITIALIZER(qemu_tpmdev_opts.head),
461     .desc = {
462         /* options are defined in the TPM backends */
463         { /* end of list */ }
464     },
465 };
466
467 static QemuOptsList qemu_realtime_opts = {
468     .name = "realtime",
469     .head = QTAILQ_HEAD_INITIALIZER(qemu_realtime_opts.head),
470     .desc = {
471         {
472             .name = "mlock",
473             .type = QEMU_OPT_BOOL,
474         },
475         { /* end of list */ }
476     },
477 };
478
479 static QemuOptsList qemu_msg_opts = {
480     .name = "msg",
481     .head = QTAILQ_HEAD_INITIALIZER(qemu_msg_opts.head),
482     .desc = {
483         {
484             .name = "timestamp",
485             .type = QEMU_OPT_BOOL,
486         },
487         { /* end of list */ }
488     },
489 };
490
491 static QemuOptsList qemu_name_opts = {
492     .name = "name",
493     .implied_opt_name = "guest",
494     .merge_lists = true,
495     .head = QTAILQ_HEAD_INITIALIZER(qemu_name_opts.head),
496     .desc = {
497         {
498             .name = "guest",
499             .type = QEMU_OPT_STRING,
500             .help = "Sets the name of the guest.\n"
501                     "This name will be displayed in the SDL window caption.\n"
502                     "The name will also be used for the VNC server",
503         }, {
504             .name = "process",
505             .type = QEMU_OPT_STRING,
506             .help = "Sets the name of the QEMU process, as shown in top etc",
507         }, {
508             .name = "debug-threads",
509             .type = QEMU_OPT_BOOL,
510             .help = "When enabled, name the individual threads; defaults off.\n"
511                     "NOTE: The thread names are for debugging and not a\n"
512                     "stable API.",
513         },
514         { /* End of list */ }
515     },
516 };
517
518 static QemuOptsList qemu_mem_opts = {
519     .name = "memory",
520     .implied_opt_name = "size",
521     .head = QTAILQ_HEAD_INITIALIZER(qemu_mem_opts.head),
522     .merge_lists = true,
523     .desc = {
524         {
525             .name = "size",
526             .type = QEMU_OPT_SIZE,
527         },
528         {
529             .name = "slots",
530             .type = QEMU_OPT_NUMBER,
531         },
532         {
533             .name = "maxmem",
534             .type = QEMU_OPT_SIZE,
535         },
536         { /* end of list */ }
537     },
538 };
539
540 static QemuOptsList qemu_icount_opts = {
541     .name = "icount",
542     .implied_opt_name = "shift",
543     .merge_lists = true,
544     .head = QTAILQ_HEAD_INITIALIZER(qemu_icount_opts.head),
545     .desc = {
546         {
547             .name = "shift",
548             .type = QEMU_OPT_STRING,
549         }, {
550             .name = "align",
551             .type = QEMU_OPT_BOOL,
552         },
553         { /* end of list */ }
554     },
555 };
556
557 /**
558  * Get machine options
559  *
560  * Returns: machine options (never null).
561  */
562 QemuOpts *qemu_get_machine_opts(void)
563 {
564     return qemu_find_opts_singleton("machine");
565 }
566
567 const char *qemu_get_vm_name(void)
568 {
569     return qemu_name;
570 }
571
572 static void res_free(void)
573 {
574     if (boot_splash_filedata != NULL) {
575         g_free(boot_splash_filedata);
576         boot_splash_filedata = NULL;
577     }
578 }
579
580 static int default_driver_check(QemuOpts *opts, void *opaque)
581 {
582     const char *driver = qemu_opt_get(opts, "driver");
583     int i;
584
585     if (!driver)
586         return 0;
587     for (i = 0; i < ARRAY_SIZE(default_list); i++) {
588         if (strcmp(default_list[i].driver, driver) != 0)
589             continue;
590         *(default_list[i].flag) = 0;
591     }
592     return 0;
593 }
594
595 /***********************************************************/
596 /* QEMU state */
597
598 static RunState current_run_state = RUN_STATE_PRELAUNCH;
599
600 /* We use RUN_STATE_MAX but any invalid value will do */
601 static RunState vmstop_requested = RUN_STATE_MAX;
602 static QemuMutex vmstop_lock;
603
604 typedef struct {
605     RunState from;
606     RunState to;
607 } RunStateTransition;
608
609 static const RunStateTransition runstate_transitions_def[] = {
610     /*     from      ->     to      */
611     { RUN_STATE_DEBUG, RUN_STATE_RUNNING },
612     { RUN_STATE_DEBUG, RUN_STATE_FINISH_MIGRATE },
613
614     { RUN_STATE_INMIGRATE, RUN_STATE_RUNNING },
615     { RUN_STATE_INMIGRATE, RUN_STATE_PAUSED },
616
617     { RUN_STATE_INTERNAL_ERROR, RUN_STATE_PAUSED },
618     { RUN_STATE_INTERNAL_ERROR, RUN_STATE_FINISH_MIGRATE },
619
620     { RUN_STATE_IO_ERROR, RUN_STATE_RUNNING },
621     { RUN_STATE_IO_ERROR, RUN_STATE_FINISH_MIGRATE },
622
623     { RUN_STATE_PAUSED, RUN_STATE_RUNNING },
624     { RUN_STATE_PAUSED, RUN_STATE_FINISH_MIGRATE },
625
626     { RUN_STATE_POSTMIGRATE, RUN_STATE_RUNNING },
627     { RUN_STATE_POSTMIGRATE, RUN_STATE_FINISH_MIGRATE },
628
629     { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING },
630     { RUN_STATE_PRELAUNCH, RUN_STATE_FINISH_MIGRATE },
631     { RUN_STATE_PRELAUNCH, RUN_STATE_INMIGRATE },
632
633     { RUN_STATE_FINISH_MIGRATE, RUN_STATE_RUNNING },
634     { RUN_STATE_FINISH_MIGRATE, RUN_STATE_POSTMIGRATE },
635
636     { RUN_STATE_RESTORE_VM, RUN_STATE_RUNNING },
637
638     { RUN_STATE_RUNNING, RUN_STATE_DEBUG },
639     { RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
640     { RUN_STATE_RUNNING, RUN_STATE_IO_ERROR },
641     { RUN_STATE_RUNNING, RUN_STATE_PAUSED },
642     { RUN_STATE_RUNNING, RUN_STATE_FINISH_MIGRATE },
643     { RUN_STATE_RUNNING, RUN_STATE_RESTORE_VM },
644     { RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
645     { RUN_STATE_RUNNING, RUN_STATE_SHUTDOWN },
646     { RUN_STATE_RUNNING, RUN_STATE_WATCHDOG },
647     { RUN_STATE_RUNNING, RUN_STATE_GUEST_PANICKED },
648
649     { RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },
650
651     { RUN_STATE_SHUTDOWN, RUN_STATE_PAUSED },
652     { RUN_STATE_SHUTDOWN, RUN_STATE_FINISH_MIGRATE },
653
654     { RUN_STATE_DEBUG, RUN_STATE_SUSPENDED },
655     { RUN_STATE_RUNNING, RUN_STATE_SUSPENDED },
656     { RUN_STATE_SUSPENDED, RUN_STATE_RUNNING },
657     { RUN_STATE_SUSPENDED, RUN_STATE_FINISH_MIGRATE },
658
659     { RUN_STATE_WATCHDOG, RUN_STATE_RUNNING },
660     { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
661
662     { RUN_STATE_GUEST_PANICKED, RUN_STATE_RUNNING },
663     { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE },
664
665     { RUN_STATE_MAX, RUN_STATE_MAX },
666 };
667
668 static bool runstate_valid_transitions[RUN_STATE_MAX][RUN_STATE_MAX];
669
670 bool runstate_check(RunState state)
671 {
672     return current_run_state == state;
673 }
674
675 static void runstate_init(void)
676 {
677     const RunStateTransition *p;
678
679     memset(&runstate_valid_transitions, 0, sizeof(runstate_valid_transitions));
680     for (p = &runstate_transitions_def[0]; p->from != RUN_STATE_MAX; p++) {
681         runstate_valid_transitions[p->from][p->to] = true;
682     }
683
684     qemu_mutex_init(&vmstop_lock);
685 }
686
687 /* This function will abort() on invalid state transitions */
688 void runstate_set(RunState new_state)
689 {
690     assert(new_state < RUN_STATE_MAX);
691
692     if (!runstate_valid_transitions[current_run_state][new_state]) {
693         fprintf(stderr, "ERROR: invalid runstate transition: '%s' -> '%s'\n",
694                 RunState_lookup[current_run_state],
695                 RunState_lookup[new_state]);
696         abort();
697     }
698     trace_runstate_set(new_state);
699     current_run_state = new_state;
700 }
701
702 int runstate_is_running(void)
703 {
704     return runstate_check(RUN_STATE_RUNNING);
705 }
706
707 bool runstate_needs_reset(void)
708 {
709     return runstate_check(RUN_STATE_INTERNAL_ERROR) ||
710         runstate_check(RUN_STATE_SHUTDOWN);
711 }
712
713 StatusInfo *qmp_query_status(Error **errp)
714 {
715     StatusInfo *info = g_malloc0(sizeof(*info));
716
717     info->running = runstate_is_running();
718     info->singlestep = singlestep;
719     info->status = current_run_state;
720
721     return info;
722 }
723
724 static bool qemu_vmstop_requested(RunState *r)
725 {
726     qemu_mutex_lock(&vmstop_lock);
727     *r = vmstop_requested;
728     vmstop_requested = RUN_STATE_MAX;
729     qemu_mutex_unlock(&vmstop_lock);
730     return *r < RUN_STATE_MAX;
731 }
732
733 void qemu_system_vmstop_request_prepare(void)
734 {
735     qemu_mutex_lock(&vmstop_lock);
736 }
737
738 void qemu_system_vmstop_request(RunState state)
739 {
740     vmstop_requested = state;
741     qemu_mutex_unlock(&vmstop_lock);
742     qemu_notify_event();
743 }
744
745 void vm_start(void)
746 {
747     RunState requested;
748
749     qemu_vmstop_requested(&requested);
750     if (runstate_is_running() && requested == RUN_STATE_MAX) {
751         return;
752     }
753
754     /* Ensure that a STOP/RESUME pair of events is emitted if a
755      * vmstop request was pending.  The BLOCK_IO_ERROR event, for
756      * example, according to documentation is always followed by
757      * the STOP event.
758      */
759     if (runstate_is_running()) {
760         qapi_event_send_stop(&error_abort);
761     } else {
762         cpu_enable_ticks();
763         runstate_set(RUN_STATE_RUNNING);
764         vm_state_notify(1, RUN_STATE_RUNNING);
765         resume_all_vcpus();
766     }
767
768     qapi_event_send_resume(&error_abort);
769 }
770
771
772 /***********************************************************/
773 /* real time host monotonic timer */
774
775 /***********************************************************/
776 /* host time/date access */
777 void qemu_get_timedate(struct tm *tm, int offset)
778 {
779     time_t ti;
780
781     time(&ti);
782     ti += offset;
783     if (rtc_date_offset == -1) {
784         if (rtc_utc)
785             gmtime_r(&ti, tm);
786         else
787             localtime_r(&ti, tm);
788     } else {
789         ti -= rtc_date_offset;
790         gmtime_r(&ti, tm);
791     }
792 }
793
794 int qemu_timedate_diff(struct tm *tm)
795 {
796     time_t seconds;
797
798     if (rtc_date_offset == -1)
799         if (rtc_utc)
800             seconds = mktimegm(tm);
801         else {
802             struct tm tmp = *tm;
803             tmp.tm_isdst = -1; /* use timezone to figure it out */
804             seconds = mktime(&tmp);
805         }
806     else
807         seconds = mktimegm(tm) + rtc_date_offset;
808
809     return seconds - time(NULL);
810 }
811
812 static void configure_rtc_date_offset(const char *startdate, int legacy)
813 {
814     time_t rtc_start_date;
815     struct tm tm;
816
817     if (!strcmp(startdate, "now") && legacy) {
818         rtc_date_offset = -1;
819     } else {
820         if (sscanf(startdate, "%d-%d-%dT%d:%d:%d",
821                    &tm.tm_year,
822                    &tm.tm_mon,
823                    &tm.tm_mday,
824                    &tm.tm_hour,
825                    &tm.tm_min,
826                    &tm.tm_sec) == 6) {
827             /* OK */
828         } else if (sscanf(startdate, "%d-%d-%d",
829                           &tm.tm_year,
830                           &tm.tm_mon,
831                           &tm.tm_mday) == 3) {
832             tm.tm_hour = 0;
833             tm.tm_min = 0;
834             tm.tm_sec = 0;
835         } else {
836             goto date_fail;
837         }
838         tm.tm_year -= 1900;
839         tm.tm_mon--;
840         rtc_start_date = mktimegm(&tm);
841         if (rtc_start_date == -1) {
842         date_fail:
843             fprintf(stderr, "Invalid date format. Valid formats are:\n"
844                             "'2006-06-17T16:01:21' or '2006-06-17'\n");
845             exit(1);
846         }
847         rtc_date_offset = time(NULL) - rtc_start_date;
848     }
849 }
850
851 static void configure_rtc(QemuOpts *opts)
852 {
853     const char *value;
854
855     value = qemu_opt_get(opts, "base");
856     if (value) {
857         if (!strcmp(value, "utc")) {
858             rtc_utc = 1;
859         } else if (!strcmp(value, "localtime")) {
860             rtc_utc = 0;
861         } else {
862             configure_rtc_date_offset(value, 0);
863         }
864     }
865     value = qemu_opt_get(opts, "clock");
866     if (value) {
867         if (!strcmp(value, "host")) {
868             rtc_clock = QEMU_CLOCK_HOST;
869         } else if (!strcmp(value, "rt")) {
870             rtc_clock = QEMU_CLOCK_REALTIME;
871         } else if (!strcmp(value, "vm")) {
872             rtc_clock = QEMU_CLOCK_VIRTUAL;
873         } else {
874             fprintf(stderr, "qemu: invalid option value '%s'\n", value);
875             exit(1);
876         }
877     }
878     value = qemu_opt_get(opts, "driftfix");
879     if (value) {
880         if (!strcmp(value, "slew")) {
881             static GlobalProperty slew_lost_ticks[] = {
882                 {
883                     .driver   = "mc146818rtc",
884                     .property = "lost_tick_policy",
885                     .value    = "slew",
886                 },
887                 { /* end of list */ }
888             };
889
890             qdev_prop_register_global_list(slew_lost_ticks);
891         } else if (!strcmp(value, "none")) {
892             /* discard is default */
893         } else {
894             fprintf(stderr, "qemu: invalid option value '%s'\n", value);
895             exit(1);
896         }
897     }
898 }
899
900 /***********************************************************/
901 /* Bluetooth support */
902 static int nb_hcis;
903 static int cur_hci;
904 static struct HCIInfo *hci_table[MAX_NICS];
905
906 struct HCIInfo *qemu_next_hci(void)
907 {
908     if (cur_hci == nb_hcis)
909         return &null_hci;
910
911     return hci_table[cur_hci++];
912 }
913
914 static int bt_hci_parse(const char *str)
915 {
916     struct HCIInfo *hci;
917     bdaddr_t bdaddr;
918
919     if (nb_hcis >= MAX_NICS) {
920         fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
921         return -1;
922     }
923
924     hci = hci_init(str);
925     if (!hci)
926         return -1;
927
928     bdaddr.b[0] = 0x52;
929     bdaddr.b[1] = 0x54;
930     bdaddr.b[2] = 0x00;
931     bdaddr.b[3] = 0x12;
932     bdaddr.b[4] = 0x34;
933     bdaddr.b[5] = 0x56 + nb_hcis;
934     hci->bdaddr_set(hci, bdaddr.b);
935
936     hci_table[nb_hcis++] = hci;
937
938     return 0;
939 }
940
941 static void bt_vhci_add(int vlan_id)
942 {
943     struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
944
945     if (!vlan->slave)
946         fprintf(stderr, "qemu: warning: adding a VHCI to "
947                         "an empty scatternet %i\n", vlan_id);
948
949     bt_vhci_init(bt_new_hci(vlan));
950 }
951
952 static struct bt_device_s *bt_device_add(const char *opt)
953 {
954     struct bt_scatternet_s *vlan;
955     int vlan_id = 0;
956     char *endp = strstr(opt, ",vlan=");
957     int len = (endp ? endp - opt : strlen(opt)) + 1;
958     char devname[10];
959
960     pstrcpy(devname, MIN(sizeof(devname), len), opt);
961
962     if (endp) {
963         vlan_id = strtol(endp + 6, &endp, 0);
964         if (*endp) {
965             fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
966             return 0;
967         }
968     }
969
970     vlan = qemu_find_bt_vlan(vlan_id);
971
972     if (!vlan->slave)
973         fprintf(stderr, "qemu: warning: adding a slave device to "
974                         "an empty scatternet %i\n", vlan_id);
975
976     if (!strcmp(devname, "keyboard"))
977         return bt_keyboard_init(vlan);
978
979     fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
980     return 0;
981 }
982
983 static int bt_parse(const char *opt)
984 {
985     const char *endp, *p;
986     int vlan;
987
988     if (strstart(opt, "hci", &endp)) {
989         if (!*endp || *endp == ',') {
990             if (*endp)
991                 if (!strstart(endp, ",vlan=", 0))
992                     opt = endp + 1;
993
994             return bt_hci_parse(opt);
995        }
996     } else if (strstart(opt, "vhci", &endp)) {
997         if (!*endp || *endp == ',') {
998             if (*endp) {
999                 if (strstart(endp, ",vlan=", &p)) {
1000                     vlan = strtol(p, (char **) &endp, 0);
1001                     if (*endp) {
1002                         fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
1003                         return 1;
1004                     }
1005                 } else {
1006                     fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
1007                     return 1;
1008                 }
1009             } else
1010                 vlan = 0;
1011
1012             bt_vhci_add(vlan);
1013             return 0;
1014         }
1015     } else if (strstart(opt, "device:", &endp))
1016         return !bt_device_add(endp);
1017
1018     fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
1019     return 1;
1020 }
1021
1022 static int parse_sandbox(QemuOpts *opts, void *opaque)
1023 {
1024     /* FIXME: change this to true for 1.3 */
1025     if (qemu_opt_get_bool(opts, "enable", false)) {
1026 #ifdef CONFIG_SECCOMP
1027         if (seccomp_start() < 0) {
1028             qerror_report(ERROR_CLASS_GENERIC_ERROR,
1029                           "failed to install seccomp syscall filter in the kernel");
1030             return -1;
1031         }
1032 #else
1033         qerror_report(ERROR_CLASS_GENERIC_ERROR,
1034                       "sandboxing request but seccomp is not compiled into this build");
1035         return -1;
1036 #endif
1037     }
1038
1039     return 0;
1040 }
1041
1042 static int parse_name(QemuOpts *opts, void *opaque)
1043 {
1044     const char *proc_name;
1045
1046     if (qemu_opt_get(opts, "debug-threads")) {
1047         qemu_thread_naming(qemu_opt_get_bool(opts, "debug-threads", false));
1048     }
1049     qemu_name = qemu_opt_get(opts, "guest");
1050
1051     proc_name = qemu_opt_get(opts, "process");
1052     if (proc_name) {
1053         os_set_proc_name(proc_name);
1054     }
1055
1056     return 0;
1057 }
1058
1059 bool usb_enabled(bool default_usb)
1060 {
1061     return qemu_opt_get_bool(qemu_get_machine_opts(), "usb",
1062                              has_defaults && default_usb);
1063 }
1064
1065 #ifndef _WIN32
1066 static int parse_add_fd(QemuOpts *opts, void *opaque)
1067 {
1068     int fd, dupfd, flags;
1069     int64_t fdset_id;
1070     const char *fd_opaque = NULL;
1071
1072     fd = qemu_opt_get_number(opts, "fd", -1);
1073     fdset_id = qemu_opt_get_number(opts, "set", -1);
1074     fd_opaque = qemu_opt_get(opts, "opaque");
1075
1076     if (fd < 0) {
1077         qerror_report(ERROR_CLASS_GENERIC_ERROR,
1078                       "fd option is required and must be non-negative");
1079         return -1;
1080     }
1081
1082     if (fd <= STDERR_FILENO) {
1083         qerror_report(ERROR_CLASS_GENERIC_ERROR,
1084                       "fd cannot be a standard I/O stream");
1085         return -1;
1086     }
1087
1088     /*
1089      * All fds inherited across exec() necessarily have FD_CLOEXEC
1090      * clear, while qemu sets FD_CLOEXEC on all other fds used internally.
1091      */
1092     flags = fcntl(fd, F_GETFD);
1093     if (flags == -1 || (flags & FD_CLOEXEC)) {
1094         qerror_report(ERROR_CLASS_GENERIC_ERROR,
1095                       "fd is not valid or already in use");
1096         return -1;
1097     }
1098
1099     if (fdset_id < 0) {
1100         qerror_report(ERROR_CLASS_GENERIC_ERROR,
1101                       "set option is required and must be non-negative");
1102         return -1;
1103     }
1104
1105 #ifdef F_DUPFD_CLOEXEC
1106     dupfd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
1107 #else
1108     dupfd = dup(fd);
1109     if (dupfd != -1) {
1110         qemu_set_cloexec(dupfd);
1111     }
1112 #endif
1113     if (dupfd == -1) {
1114         qerror_report(ERROR_CLASS_GENERIC_ERROR,
1115                       "Error duplicating fd: %s", strerror(errno));
1116         return -1;
1117     }
1118
1119     /* add the duplicate fd, and optionally the opaque string, to the fd set */
1120     monitor_fdset_add_fd(dupfd, true, fdset_id, fd_opaque ? true : false,
1121                          fd_opaque, NULL);
1122
1123     return 0;
1124 }
1125
1126 static int cleanup_add_fd(QemuOpts *opts, void *opaque)
1127 {
1128     int fd;
1129
1130     fd = qemu_opt_get_number(opts, "fd", -1);
1131     close(fd);
1132
1133     return 0;
1134 }
1135 #endif
1136
1137 /***********************************************************/
1138 /* QEMU Block devices */
1139
1140 #define HD_OPTS "media=disk"
1141 #define CDROM_OPTS "media=cdrom"
1142 #define FD_OPTS ""
1143 #define PFLASH_OPTS ""
1144 #define MTD_OPTS ""
1145 #define SD_OPTS ""
1146
1147 static int drive_init_func(QemuOpts *opts, void *opaque)
1148 {
1149     BlockInterfaceType *block_default_type = opaque;
1150
1151     return drive_new(opts, *block_default_type) == NULL;
1152 }
1153
1154 static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
1155 {
1156     if (qemu_opt_get(opts, "snapshot") == NULL) {
1157         qemu_opt_set(opts, "snapshot", "on");
1158     }
1159     return 0;
1160 }
1161
1162 static void default_drive(int enable, int snapshot, BlockInterfaceType type,
1163                           int index, const char *optstr)
1164 {
1165     QemuOpts *opts;
1166     DriveInfo *dinfo;
1167
1168     if (!enable || drive_get_by_index(type, index)) {
1169         return;
1170     }
1171
1172     opts = drive_add(type, index, NULL, optstr);
1173     if (snapshot) {
1174         drive_enable_snapshot(opts, NULL);
1175     }
1176
1177     dinfo = drive_new(opts, type);
1178     if (!dinfo) {
1179         exit(1);
1180     }
1181     dinfo->is_default = true;
1182
1183 }
1184
1185 void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque)
1186 {
1187     boot_set_handler = func;
1188     boot_set_opaque = opaque;
1189 }
1190
1191 int qemu_boot_set(const char *boot_order)
1192 {
1193     if (!boot_set_handler) {
1194         return -EINVAL;
1195     }
1196     return boot_set_handler(boot_set_opaque, boot_order);
1197 }
1198
1199 static void validate_bootdevices(const char *devices)
1200 {
1201     /* We just do some generic consistency checks */
1202     const char *p;
1203     int bitmap = 0;
1204
1205     for (p = devices; *p != '\0'; p++) {
1206         /* Allowed boot devices are:
1207          * a-b: floppy disk drives
1208          * c-f: IDE disk drives
1209          * g-m: machine implementation dependent drives
1210          * n-p: network devices
1211          * It's up to each machine implementation to check if the given boot
1212          * devices match the actual hardware implementation and firmware
1213          * features.
1214          */
1215         if (*p < 'a' || *p > 'p') {
1216             fprintf(stderr, "Invalid boot device '%c'\n", *p);
1217             exit(1);
1218         }
1219         if (bitmap & (1 << (*p - 'a'))) {
1220             fprintf(stderr, "Boot device '%c' was given twice\n", *p);
1221             exit(1);
1222         }
1223         bitmap |= 1 << (*p - 'a');
1224     }
1225 }
1226
1227 static void restore_boot_order(void *opaque)
1228 {
1229     char *normal_boot_order = opaque;
1230     static int first = 1;
1231
1232     /* Restore boot order and remove ourselves after the first boot */
1233     if (first) {
1234         first = 0;
1235         return;
1236     }
1237
1238     qemu_boot_set(normal_boot_order);
1239
1240     qemu_unregister_reset(restore_boot_order, normal_boot_order);
1241     g_free(normal_boot_order);
1242 }
1243
1244 static QemuOptsList qemu_smp_opts = {
1245     .name = "smp-opts",
1246     .implied_opt_name = "cpus",
1247     .merge_lists = true,
1248     .head = QTAILQ_HEAD_INITIALIZER(qemu_smp_opts.head),
1249     .desc = {
1250         {
1251             .name = "cpus",
1252             .type = QEMU_OPT_NUMBER,
1253         }, {
1254             .name = "sockets",
1255             .type = QEMU_OPT_NUMBER,
1256         }, {
1257             .name = "cores",
1258             .type = QEMU_OPT_NUMBER,
1259         }, {
1260             .name = "threads",
1261             .type = QEMU_OPT_NUMBER,
1262         }, {
1263             .name = "maxcpus",
1264             .type = QEMU_OPT_NUMBER,
1265         },
1266         { /*End of list */ }
1267     },
1268 };
1269
1270 static void smp_parse(QemuOpts *opts)
1271 {
1272     if (opts) {
1273
1274         unsigned cpus    = qemu_opt_get_number(opts, "cpus", 0);
1275         unsigned sockets = qemu_opt_get_number(opts, "sockets", 0);
1276         unsigned cores   = qemu_opt_get_number(opts, "cores", 0);
1277         unsigned threads = qemu_opt_get_number(opts, "threads", 0);
1278
1279         /* compute missing values, prefer sockets over cores over threads */
1280         if (cpus == 0 || sockets == 0) {
1281             sockets = sockets > 0 ? sockets : 1;
1282             cores = cores > 0 ? cores : 1;
1283             threads = threads > 0 ? threads : 1;
1284             if (cpus == 0) {
1285                 cpus = cores * threads * sockets;
1286             }
1287         } else {
1288             if (cores == 0) {
1289                 threads = threads > 0 ? threads : 1;
1290                 cores = cpus / (sockets * threads);
1291             } else {
1292                 threads = cpus / (cores * sockets);
1293             }
1294         }
1295
1296         max_cpus = qemu_opt_get_number(opts, "maxcpus", 0);
1297
1298         smp_cpus = cpus;
1299         smp_cores = cores > 0 ? cores : 1;
1300         smp_threads = threads > 0 ? threads : 1;
1301
1302     }
1303
1304     if (max_cpus == 0) {
1305         max_cpus = smp_cpus;
1306     }
1307
1308     if (max_cpus > MAX_CPUMASK_BITS) {
1309         fprintf(stderr, "Unsupported number of maxcpus\n");
1310         exit(1);
1311     }
1312     if (max_cpus < smp_cpus) {
1313         fprintf(stderr, "maxcpus must be equal to or greater than smp\n");
1314         exit(1);
1315     }
1316
1317 }
1318
1319 static void realtime_init(void)
1320 {
1321     if (enable_mlock) {
1322         if (os_mlock() < 0) {
1323             fprintf(stderr, "qemu: locking memory failed\n");
1324             exit(1);
1325         }
1326     }
1327 }
1328
1329
1330 static void configure_msg(QemuOpts *opts)
1331 {
1332     enable_timestamp_msg = qemu_opt_get_bool(opts, "timestamp", true);
1333 }
1334
1335 /***********************************************************/
1336 /* USB devices */
1337
1338 static int usb_device_add(const char *devname)
1339 {
1340     USBDevice *dev = NULL;
1341 #ifndef CONFIG_LINUX
1342     const char *p;
1343 #endif
1344
1345     if (!usb_enabled(false)) {
1346         return -1;
1347     }
1348
1349     /* drivers with .usbdevice_name entry in USBDeviceInfo */
1350     dev = usbdevice_create(devname);
1351     if (dev)
1352         goto done;
1353
1354     /* the other ones */
1355 #ifndef CONFIG_LINUX
1356     /* only the linux version is qdev-ified, usb-bsd still needs this */
1357     if (strstart(devname, "host:", &p)) {
1358         dev = usb_host_device_open(usb_bus_find(-1), p);
1359     }
1360 #endif
1361     if (!dev)
1362         return -1;
1363
1364 done:
1365     return 0;
1366 }
1367
1368 static int usb_device_del(const char *devname)
1369 {
1370     int bus_num, addr;
1371     const char *p;
1372
1373     if (strstart(devname, "host:", &p)) {
1374         return -1;
1375     }
1376
1377     if (!usb_enabled(false)) {
1378         return -1;
1379     }
1380
1381     p = strchr(devname, '.');
1382     if (!p)
1383         return -1;
1384     bus_num = strtoul(devname, NULL, 0);
1385     addr = strtoul(p + 1, NULL, 0);
1386
1387     return usb_device_delete_addr(bus_num, addr);
1388 }
1389
1390 static int usb_parse(const char *cmdline)
1391 {
1392     int r;
1393     r = usb_device_add(cmdline);
1394     if (r < 0) {
1395         fprintf(stderr, "qemu: could not add USB device '%s'\n", cmdline);
1396     }
1397     return r;
1398 }
1399
1400 void do_usb_add(Monitor *mon, const QDict *qdict)
1401 {
1402     const char *devname = qdict_get_str(qdict, "devname");
1403     if (usb_device_add(devname) < 0) {
1404         error_report("could not add USB device '%s'", devname);
1405     }
1406 }
1407
1408 void do_usb_del(Monitor *mon, const QDict *qdict)
1409 {
1410     const char *devname = qdict_get_str(qdict, "devname");
1411     if (usb_device_del(devname) < 0) {
1412         error_report("could not delete USB device '%s'", devname);
1413     }
1414 }
1415
1416 /***********************************************************/
1417 /* machine registration */
1418
1419 MachineState *current_machine;
1420
1421 static void machine_class_init(ObjectClass *oc, void *data)
1422 {
1423     MachineClass *mc = MACHINE_CLASS(oc);
1424     QEMUMachine *qm = data;
1425
1426     mc->family = qm->family;
1427     mc->name = qm->name;
1428     mc->alias = qm->alias;
1429     mc->desc = qm->desc;
1430     mc->init = qm->init;
1431     mc->reset = qm->reset;
1432     mc->hot_add_cpu = qm->hot_add_cpu;
1433     mc->kvm_type = qm->kvm_type;
1434     mc->block_default_type = qm->block_default_type;
1435     mc->units_per_default_bus = qm->units_per_default_bus;
1436     mc->max_cpus = qm->max_cpus;
1437     mc->no_serial = qm->no_serial;
1438     mc->no_parallel = qm->no_parallel;
1439     mc->use_virtcon = qm->use_virtcon;
1440     mc->use_sclp = qm->use_sclp;
1441     mc->no_floppy = qm->no_floppy;
1442     mc->no_cdrom = qm->no_cdrom;
1443     mc->no_sdcard = qm->no_sdcard;
1444     mc->has_dynamic_sysbus = qm->has_dynamic_sysbus;
1445     mc->is_default = qm->is_default;
1446     mc->default_machine_opts = qm->default_machine_opts;
1447     mc->default_boot_order = qm->default_boot_order;
1448     mc->default_display = qm->default_display;
1449     mc->compat_props = qm->compat_props;
1450     mc->hw_version = qm->hw_version;
1451 }
1452
1453 int qemu_register_machine(QEMUMachine *m)
1454 {
1455     char *name = g_strconcat(m->name, TYPE_MACHINE_SUFFIX, NULL);
1456     TypeInfo ti = {
1457         .name       = name,
1458         .parent     = TYPE_MACHINE,
1459         .class_init = machine_class_init,
1460         .class_data = (void *)m,
1461     };
1462
1463     type_register(&ti);
1464     g_free(name);
1465
1466     return 0;
1467 }
1468
1469 static MachineClass *find_machine(const char *name)
1470 {
1471     GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1472     MachineClass *mc = NULL;
1473
1474     for (el = machines; el; el = el->next) {
1475         MachineClass *temp = el->data;
1476
1477         if (!strcmp(temp->name, name)) {
1478             mc = temp;
1479             break;
1480         }
1481         if (temp->alias &&
1482             !strcmp(temp->alias, name)) {
1483             mc = temp;
1484             break;
1485         }
1486     }
1487
1488     g_slist_free(machines);
1489     return mc;
1490 }
1491
1492 MachineClass *find_default_machine(void)
1493 {
1494     GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1495     MachineClass *mc = NULL;
1496
1497     for (el = machines; el; el = el->next) {
1498         MachineClass *temp = el->data;
1499
1500         if (temp->is_default) {
1501             mc = temp;
1502             break;
1503         }
1504     }
1505
1506     g_slist_free(machines);
1507     return mc;
1508 }
1509
1510 MachineInfoList *qmp_query_machines(Error **errp)
1511 {
1512     GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1513     MachineInfoList *mach_list = NULL;
1514
1515     for (el = machines; el; el = el->next) {
1516         MachineClass *mc = el->data;
1517         MachineInfoList *entry;
1518         MachineInfo *info;
1519
1520         info = g_malloc0(sizeof(*info));
1521         if (mc->is_default) {
1522             info->has_is_default = true;
1523             info->is_default = true;
1524         }
1525
1526         if (mc->alias) {
1527             info->has_alias = true;
1528             info->alias = g_strdup(mc->alias);
1529         }
1530
1531         info->name = g_strdup(mc->name);
1532         info->cpu_max = !mc->max_cpus ? 1 : mc->max_cpus;
1533
1534         entry = g_malloc0(sizeof(*entry));
1535         entry->value = info;
1536         entry->next = mach_list;
1537         mach_list = entry;
1538     }
1539
1540     g_slist_free(machines);
1541     return mach_list;
1542 }
1543
1544 /***********************************************************/
1545 /* main execution loop */
1546
1547 struct vm_change_state_entry {
1548     VMChangeStateHandler *cb;
1549     void *opaque;
1550     QLIST_ENTRY (vm_change_state_entry) entries;
1551 };
1552
1553 static QLIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
1554
1555 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
1556                                                      void *opaque)
1557 {
1558     VMChangeStateEntry *e;
1559
1560     e = g_malloc0(sizeof (*e));
1561
1562     e->cb = cb;
1563     e->opaque = opaque;
1564     QLIST_INSERT_HEAD(&vm_change_state_head, e, entries);
1565     return e;
1566 }
1567
1568 void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
1569 {
1570     QLIST_REMOVE (e, entries);
1571     g_free (e);
1572 }
1573
1574 void vm_state_notify(int running, RunState state)
1575 {
1576     VMChangeStateEntry *e, *next;
1577
1578     trace_vm_state_notify(running, state);
1579
1580     QLIST_FOREACH_SAFE(e, &vm_change_state_head, entries, next) {
1581         e->cb(e->opaque, running, state);
1582     }
1583 }
1584
1585 /* reset/shutdown handler */
1586
1587 typedef struct QEMUResetEntry {
1588     QTAILQ_ENTRY(QEMUResetEntry) entry;
1589     QEMUResetHandler *func;
1590     void *opaque;
1591 } QEMUResetEntry;
1592
1593 static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
1594     QTAILQ_HEAD_INITIALIZER(reset_handlers);
1595 static int reset_requested;
1596 static int shutdown_requested, shutdown_signal = -1;
1597 static pid_t shutdown_pid;
1598 static int powerdown_requested;
1599 static int debug_requested;
1600 static int suspend_requested;
1601 static WakeupReason wakeup_reason;
1602 static NotifierList powerdown_notifiers =
1603     NOTIFIER_LIST_INITIALIZER(powerdown_notifiers);
1604 static NotifierList suspend_notifiers =
1605     NOTIFIER_LIST_INITIALIZER(suspend_notifiers);
1606 static NotifierList wakeup_notifiers =
1607     NOTIFIER_LIST_INITIALIZER(wakeup_notifiers);
1608 static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE);
1609
1610 int qemu_shutdown_requested_get(void)
1611 {
1612     return shutdown_requested;
1613 }
1614
1615 int qemu_reset_requested_get(void)
1616 {
1617     return reset_requested;
1618 }
1619
1620 static int qemu_shutdown_requested(void)
1621 {
1622     return atomic_xchg(&shutdown_requested, 0);
1623 }
1624
1625 static void qemu_kill_report(void)
1626 {
1627     if (!qtest_driver() && shutdown_signal != -1) {
1628         fprintf(stderr, "qemu: terminating on signal %d", shutdown_signal);
1629         if (shutdown_pid == 0) {
1630             /* This happens for eg ^C at the terminal, so it's worth
1631              * avoiding printing an odd message in that case.
1632              */
1633             fputc('\n', stderr);
1634         } else {
1635             fprintf(stderr, " from pid " FMT_pid "\n", shutdown_pid);
1636         }
1637         shutdown_signal = -1;
1638     }
1639 }
1640
1641 static int qemu_reset_requested(void)
1642 {
1643     int r = reset_requested;
1644     reset_requested = 0;
1645     return r;
1646 }
1647
1648 static int qemu_suspend_requested(void)
1649 {
1650     int r = suspend_requested;
1651     suspend_requested = 0;
1652     return r;
1653 }
1654
1655 static WakeupReason qemu_wakeup_requested(void)
1656 {
1657     return wakeup_reason;
1658 }
1659
1660 static int qemu_powerdown_requested(void)
1661 {
1662     int r = powerdown_requested;
1663     powerdown_requested = 0;
1664     return r;
1665 }
1666
1667 static int qemu_debug_requested(void)
1668 {
1669     int r = debug_requested;
1670     debug_requested = 0;
1671     return r;
1672 }
1673
1674 void qemu_register_reset(QEMUResetHandler *func, void *opaque)
1675 {
1676     QEMUResetEntry *re = g_malloc0(sizeof(QEMUResetEntry));
1677
1678     re->func = func;
1679     re->opaque = opaque;
1680     QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
1681 }
1682
1683 void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
1684 {
1685     QEMUResetEntry *re;
1686
1687     QTAILQ_FOREACH(re, &reset_handlers, entry) {
1688         if (re->func == func && re->opaque == opaque) {
1689             QTAILQ_REMOVE(&reset_handlers, re, entry);
1690             g_free(re);
1691             return;
1692         }
1693     }
1694 }
1695
1696 void qemu_devices_reset(void)
1697 {
1698     QEMUResetEntry *re, *nre;
1699
1700     /* reset all devices */
1701     QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
1702         re->func(re->opaque);
1703     }
1704 }
1705
1706 void qemu_system_reset(bool report)
1707 {
1708     MachineClass *mc;
1709
1710     mc = current_machine ? MACHINE_GET_CLASS(current_machine) : NULL;
1711
1712     if (mc && mc->reset) {
1713         mc->reset();
1714     } else {
1715         qemu_devices_reset();
1716     }
1717     if (report) {
1718         qapi_event_send_reset(&error_abort);
1719     }
1720     cpu_synchronize_all_post_reset();
1721 }
1722
1723 void qemu_system_reset_request(void)
1724 {
1725     if (no_reboot) {
1726         shutdown_requested = 1;
1727     } else {
1728         reset_requested = 1;
1729     }
1730     cpu_stop_current();
1731     qemu_notify_event();
1732 }
1733
1734 static void qemu_system_suspend(void)
1735 {
1736     pause_all_vcpus();
1737     notifier_list_notify(&suspend_notifiers, NULL);
1738     runstate_set(RUN_STATE_SUSPENDED);
1739     qapi_event_send_suspend(&error_abort);
1740 }
1741
1742 void qemu_system_suspend_request(void)
1743 {
1744     if (runstate_check(RUN_STATE_SUSPENDED)) {
1745         return;
1746     }
1747     suspend_requested = 1;
1748     cpu_stop_current();
1749     qemu_notify_event();
1750 }
1751
1752 void qemu_register_suspend_notifier(Notifier *notifier)
1753 {
1754     notifier_list_add(&suspend_notifiers, notifier);
1755 }
1756
1757 void qemu_system_wakeup_request(WakeupReason reason)
1758 {
1759     trace_system_wakeup_request(reason);
1760
1761     if (!runstate_check(RUN_STATE_SUSPENDED)) {
1762         return;
1763     }
1764     if (!(wakeup_reason_mask & (1 << reason))) {
1765         return;
1766     }
1767     runstate_set(RUN_STATE_RUNNING);
1768     wakeup_reason = reason;
1769     qemu_notify_event();
1770 }
1771
1772 void qemu_system_wakeup_enable(WakeupReason reason, bool enabled)
1773 {
1774     if (enabled) {
1775         wakeup_reason_mask |= (1 << reason);
1776     } else {
1777         wakeup_reason_mask &= ~(1 << reason);
1778     }
1779 }
1780
1781 void qemu_register_wakeup_notifier(Notifier *notifier)
1782 {
1783     notifier_list_add(&wakeup_notifiers, notifier);
1784 }
1785
1786 void qemu_system_killed(int signal, pid_t pid)
1787 {
1788     shutdown_signal = signal;
1789     shutdown_pid = pid;
1790     no_shutdown = 0;
1791     qemu_system_shutdown_request();
1792 }
1793
1794 void qemu_system_shutdown_request(void)
1795 {
1796     trace_qemu_system_shutdown_request();
1797     shutdown_requested = 1;
1798     qemu_notify_event();
1799 }
1800
1801 static void qemu_system_powerdown(void)
1802 {
1803     qapi_event_send_powerdown(&error_abort);
1804     notifier_list_notify(&powerdown_notifiers, NULL);
1805 }
1806
1807 void qemu_system_powerdown_request(void)
1808 {
1809     trace_qemu_system_powerdown_request();
1810     powerdown_requested = 1;
1811     qemu_notify_event();
1812 }
1813
1814 void qemu_register_powerdown_notifier(Notifier *notifier)
1815 {
1816     notifier_list_add(&powerdown_notifiers, notifier);
1817 }
1818
1819 void qemu_system_debug_request(void)
1820 {
1821     debug_requested = 1;
1822     qemu_notify_event();
1823 }
1824
1825 static bool main_loop_should_exit(void)
1826 {
1827     RunState r;
1828     if (qemu_debug_requested()) {
1829         vm_stop(RUN_STATE_DEBUG);
1830     }
1831     if (qemu_suspend_requested()) {
1832         qemu_system_suspend();
1833     }
1834     if (qemu_shutdown_requested()) {
1835         qemu_kill_report();
1836         qapi_event_send_shutdown(&error_abort);
1837         if (no_shutdown) {
1838             vm_stop(RUN_STATE_SHUTDOWN);
1839         } else {
1840             return true;
1841         }
1842     }
1843     if (qemu_reset_requested()) {
1844         pause_all_vcpus();
1845         cpu_synchronize_all_states();
1846         qemu_system_reset(VMRESET_REPORT);
1847         resume_all_vcpus();
1848         if (runstate_needs_reset()) {
1849             runstate_set(RUN_STATE_PAUSED);
1850         }
1851     }
1852     if (qemu_wakeup_requested()) {
1853         pause_all_vcpus();
1854         cpu_synchronize_all_states();
1855         qemu_system_reset(VMRESET_SILENT);
1856         notifier_list_notify(&wakeup_notifiers, &wakeup_reason);
1857         wakeup_reason = QEMU_WAKEUP_REASON_NONE;
1858         resume_all_vcpus();
1859         qapi_event_send_wakeup(&error_abort);
1860     }
1861     if (qemu_powerdown_requested()) {
1862         qemu_system_powerdown();
1863     }
1864     if (qemu_vmstop_requested(&r)) {
1865         vm_stop(r);
1866     }
1867     return false;
1868 }
1869
1870 static void main_loop(void)
1871 {
1872     bool nonblocking;
1873     int last_io = 0;
1874 #ifdef CONFIG_PROFILER
1875     int64_t ti;
1876 #endif
1877     do {
1878         nonblocking = !kvm_enabled() && !xen_enabled() && last_io > 0;
1879 #ifdef CONFIG_PROFILER
1880         ti = profile_getclock();
1881 #endif
1882         last_io = main_loop_wait(nonblocking);
1883 #ifdef CONFIG_PROFILER
1884         dev_time += profile_getclock() - ti;
1885 #endif
1886     } while (!main_loop_should_exit());
1887 }
1888
1889 static void version(void)
1890 {
1891     printf("QEMU emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
1892 }
1893
1894 static void help(int exitcode)
1895 {
1896     version();
1897     printf("usage: %s [options] [disk_image]\n\n"
1898            "'disk_image' is a raw hard disk image for IDE hard disk 0\n\n",
1899             error_get_progname());
1900
1901 #define QEMU_OPTIONS_GENERATE_HELP
1902 #include "qemu-options-wrapper.h"
1903
1904     printf("\nDuring emulation, the following keys are useful:\n"
1905            "ctrl-alt-f      toggle full screen\n"
1906            "ctrl-alt-n      switch to virtual console 'n'\n"
1907            "ctrl-alt        toggle mouse and keyboard grab\n"
1908            "\n"
1909            "When using -nographic, press 'ctrl-a h' to get some help.\n");
1910
1911     exit(exitcode);
1912 }
1913
1914 #define HAS_ARG 0x0001
1915
1916 typedef struct QEMUOption {
1917     const char *name;
1918     int flags;
1919     int index;
1920     uint32_t arch_mask;
1921 } QEMUOption;
1922
1923 static const QEMUOption qemu_options[] = {
1924     { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL },
1925 #define QEMU_OPTIONS_GENERATE_OPTIONS
1926 #include "qemu-options-wrapper.h"
1927     { NULL },
1928 };
1929
1930 static bool vga_available(void)
1931 {
1932     return object_class_by_name("VGA") || object_class_by_name("isa-vga");
1933 }
1934
1935 static bool cirrus_vga_available(void)
1936 {
1937     return object_class_by_name("cirrus-vga")
1938            || object_class_by_name("isa-cirrus-vga");
1939 }
1940
1941 static bool vmware_vga_available(void)
1942 {
1943     return object_class_by_name("vmware-svga");
1944 }
1945
1946 static bool qxl_vga_available(void)
1947 {
1948     return object_class_by_name("qxl-vga");
1949 }
1950
1951 static bool tcx_vga_available(void)
1952 {
1953     return object_class_by_name("SUNW,tcx");
1954 }
1955
1956 static bool cg3_vga_available(void)
1957 {
1958     return object_class_by_name("cgthree");
1959 }
1960
1961 static void select_vgahw (const char *p)
1962 {
1963     const char *opts;
1964
1965     assert(vga_interface_type == VGA_NONE);
1966     if (strstart(p, "std", &opts)) {
1967         if (vga_available()) {
1968             vga_interface_type = VGA_STD;
1969         } else {
1970             fprintf(stderr, "Error: standard VGA not available\n");
1971             exit(0);
1972         }
1973     } else if (strstart(p, "cirrus", &opts)) {
1974         if (cirrus_vga_available()) {
1975             vga_interface_type = VGA_CIRRUS;
1976         } else {
1977             fprintf(stderr, "Error: Cirrus VGA not available\n");
1978             exit(0);
1979         }
1980     } else if (strstart(p, "vmware", &opts)) {
1981         if (vmware_vga_available()) {
1982             vga_interface_type = VGA_VMWARE;
1983         } else {
1984             fprintf(stderr, "Error: VMWare SVGA not available\n");
1985             exit(0);
1986         }
1987     } else if (strstart(p, "xenfb", &opts)) {
1988         vga_interface_type = VGA_XENFB;
1989     } else if (strstart(p, "qxl", &opts)) {
1990         if (qxl_vga_available()) {
1991             vga_interface_type = VGA_QXL;
1992         } else {
1993             fprintf(stderr, "Error: QXL VGA not available\n");
1994             exit(0);
1995         }
1996     } else if (strstart(p, "tcx", &opts)) {
1997         if (tcx_vga_available()) {
1998             vga_interface_type = VGA_TCX;
1999         } else {
2000             fprintf(stderr, "Error: TCX framebuffer not available\n");
2001             exit(0);
2002         }
2003     } else if (strstart(p, "cg3", &opts)) {
2004         if (cg3_vga_available()) {
2005             vga_interface_type = VGA_CG3;
2006         } else {
2007             fprintf(stderr, "Error: CG3 framebuffer not available\n");
2008             exit(0);
2009         }
2010     } else if (!strstart(p, "none", &opts)) {
2011     invalid_vga:
2012         fprintf(stderr, "Unknown vga type: %s\n", p);
2013         exit(1);
2014     }
2015     while (*opts) {
2016         const char *nextopt;
2017
2018         if (strstart(opts, ",retrace=", &nextopt)) {
2019             opts = nextopt;
2020             if (strstart(opts, "dumb", &nextopt))
2021                 vga_retrace_method = VGA_RETRACE_DUMB;
2022             else if (strstart(opts, "precise", &nextopt))
2023                 vga_retrace_method = VGA_RETRACE_PRECISE;
2024             else goto invalid_vga;
2025         } else goto invalid_vga;
2026         opts = nextopt;
2027     }
2028 }
2029
2030 static DisplayType select_display(const char *p)
2031 {
2032     const char *opts;
2033     DisplayType display = DT_DEFAULT;
2034
2035     if (strstart(p, "sdl", &opts)) {
2036 #ifdef CONFIG_SDL
2037         display = DT_SDL;
2038         while (*opts) {
2039             const char *nextopt;
2040
2041             if (strstart(opts, ",frame=", &nextopt)) {
2042                 opts = nextopt;
2043                 if (strstart(opts, "on", &nextopt)) {
2044                     no_frame = 0;
2045                 } else if (strstart(opts, "off", &nextopt)) {
2046                     no_frame = 1;
2047                 } else {
2048                     goto invalid_sdl_args;
2049                 }
2050             } else if (strstart(opts, ",alt_grab=", &nextopt)) {
2051                 opts = nextopt;
2052                 if (strstart(opts, "on", &nextopt)) {
2053                     alt_grab = 1;
2054                 } else if (strstart(opts, "off", &nextopt)) {
2055                     alt_grab = 0;
2056                 } else {
2057                     goto invalid_sdl_args;
2058                 }
2059             } else if (strstart(opts, ",ctrl_grab=", &nextopt)) {
2060                 opts = nextopt;
2061                 if (strstart(opts, "on", &nextopt)) {
2062                     ctrl_grab = 1;
2063                 } else if (strstart(opts, "off", &nextopt)) {
2064                     ctrl_grab = 0;
2065                 } else {
2066                     goto invalid_sdl_args;
2067                 }
2068             } else if (strstart(opts, ",window_close=", &nextopt)) {
2069                 opts = nextopt;
2070                 if (strstart(opts, "on", &nextopt)) {
2071                     no_quit = 0;
2072                 } else if (strstart(opts, "off", &nextopt)) {
2073                     no_quit = 1;
2074                 } else {
2075                     goto invalid_sdl_args;
2076                 }
2077             } else {
2078             invalid_sdl_args:
2079                 fprintf(stderr, "Invalid SDL option string: %s\n", p);
2080                 exit(1);
2081             }
2082             opts = nextopt;
2083         }
2084 #else
2085         fprintf(stderr, "SDL support is disabled\n");
2086         exit(1);
2087 #endif
2088     } else if (strstart(p, "vnc", &opts)) {
2089 #ifdef CONFIG_VNC
2090         display_remote++;
2091
2092         if (*opts) {
2093             const char *nextopt;
2094
2095             if (strstart(opts, "=", &nextopt)) {
2096                 vnc_display = nextopt;
2097             }
2098         }
2099         if (!vnc_display) {
2100             fprintf(stderr, "VNC requires a display argument vnc=<display>\n");
2101             exit(1);
2102         }
2103 #else
2104         fprintf(stderr, "VNC support is disabled\n");
2105         exit(1);
2106 #endif
2107     } else if (strstart(p, "curses", &opts)) {
2108 #ifdef CONFIG_CURSES
2109         display = DT_CURSES;
2110 #else
2111         fprintf(stderr, "Curses support is disabled\n");
2112         exit(1);
2113 #endif
2114     } else if (strstart(p, "gtk", &opts)) {
2115 #ifdef CONFIG_GTK
2116         display = DT_GTK;
2117         while (*opts) {
2118             const char *nextopt;
2119
2120             if (strstart(opts, ",grab_on_hover=", &nextopt)) {
2121                 opts = nextopt;
2122                 if (strstart(opts, "on", &nextopt)) {
2123                     grab_on_hover = true;
2124                 } else if (strstart(opts, "off", &nextopt)) {
2125                     grab_on_hover = false;
2126                 } else {
2127                     goto invalid_gtk_args;
2128                 }
2129             } else {
2130             invalid_gtk_args:
2131                 fprintf(stderr, "Invalid GTK option string: %s\n", p);
2132                 exit(1);
2133             }
2134             opts = nextopt;
2135         }
2136 #else
2137         fprintf(stderr, "GTK support is disabled\n");
2138         exit(1);
2139 #endif
2140     } else if (strstart(p, "none", &opts)) {
2141         display = DT_NONE;
2142     } else {
2143         fprintf(stderr, "Unknown display type: %s\n", p);
2144         exit(1);
2145     }
2146
2147     return display;
2148 }
2149
2150 static int balloon_parse(const char *arg)
2151 {
2152     QemuOpts *opts;
2153
2154     if (strcmp(arg, "none") == 0) {
2155         return 0;
2156     }
2157
2158     if (!strncmp(arg, "virtio", 6)) {
2159         if (arg[6] == ',') {
2160             /* have params -> parse them */
2161             opts = qemu_opts_parse(qemu_find_opts("device"), arg+7, 0);
2162             if (!opts)
2163                 return  -1;
2164         } else {
2165             /* create empty opts */
2166             opts = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
2167                                     &error_abort);
2168         }
2169         qemu_opt_set(opts, "driver", "virtio-balloon");
2170         return 0;
2171     }
2172
2173     return -1;
2174 }
2175
2176 char *qemu_find_file(int type, const char *name)
2177 {
2178     int i;
2179     const char *subdir;
2180     char *buf;
2181
2182     /* Try the name as a straight path first */
2183     if (access(name, R_OK) == 0) {
2184         trace_load_file(name, name);
2185         return g_strdup(name);
2186     }
2187
2188     switch (type) {
2189     case QEMU_FILE_TYPE_BIOS:
2190         subdir = "";
2191         break;
2192     case QEMU_FILE_TYPE_KEYMAP:
2193         subdir = "keymaps/";
2194         break;
2195     default:
2196         abort();
2197     }
2198
2199     for (i = 0; i < data_dir_idx; i++) {
2200         buf = g_strdup_printf("%s/%s%s", data_dir[i], subdir, name);
2201         if (access(buf, R_OK) == 0) {
2202             trace_load_file(name, buf);
2203             return buf;
2204         }
2205         g_free(buf);
2206     }
2207     return NULL;
2208 }
2209
2210 static int device_help_func(QemuOpts *opts, void *opaque)
2211 {
2212     return qdev_device_help(opts);
2213 }
2214
2215 static int device_init_func(QemuOpts *opts, void *opaque)
2216 {
2217     DeviceState *dev;
2218
2219     dev = qdev_device_add(opts);
2220     if (!dev)
2221         return -1;
2222     object_unref(OBJECT(dev));
2223     return 0;
2224 }
2225
2226 static int chardev_init_func(QemuOpts *opts, void *opaque)
2227 {
2228     Error *local_err = NULL;
2229
2230     qemu_chr_new_from_opts(opts, NULL, &local_err);
2231     if (local_err) {
2232         error_report("%s", error_get_pretty(local_err));
2233         error_free(local_err);
2234         return -1;
2235     }
2236     return 0;
2237 }
2238
2239 #ifdef CONFIG_VIRTFS
2240 static int fsdev_init_func(QemuOpts *opts, void *opaque)
2241 {
2242     int ret;
2243     ret = qemu_fsdev_add(opts);
2244
2245     return ret;
2246 }
2247 #endif
2248
2249 static int mon_init_func(QemuOpts *opts, void *opaque)
2250 {
2251     CharDriverState *chr;
2252     const char *chardev;
2253     const char *mode;
2254     int flags;
2255
2256     mode = qemu_opt_get(opts, "mode");
2257     if (mode == NULL) {
2258         mode = "readline";
2259     }
2260     if (strcmp(mode, "readline") == 0) {
2261         flags = MONITOR_USE_READLINE;
2262     } else if (strcmp(mode, "control") == 0) {
2263         flags = MONITOR_USE_CONTROL;
2264     } else {
2265         fprintf(stderr, "unknown monitor mode \"%s\"\n", mode);
2266         exit(1);
2267     }
2268
2269     if (qemu_opt_get_bool(opts, "pretty", 0))
2270         flags |= MONITOR_USE_PRETTY;
2271
2272     if (qemu_opt_get_bool(opts, "default", 0))
2273         flags |= MONITOR_IS_DEFAULT;
2274
2275     chardev = qemu_opt_get(opts, "chardev");
2276     chr = qemu_chr_find(chardev);
2277     if (chr == NULL) {
2278         fprintf(stderr, "chardev \"%s\" not found\n", chardev);
2279         exit(1);
2280     }
2281
2282     qemu_chr_fe_claim_no_fail(chr);
2283     monitor_init(chr, flags);
2284     return 0;
2285 }
2286
2287 static void monitor_parse(const char *optarg, const char *mode)
2288 {
2289     static int monitor_device_index = 0;
2290     QemuOpts *opts;
2291     const char *p;
2292     char label[32];
2293     int def = 0;
2294
2295     if (strstart(optarg, "chardev:", &p)) {
2296         snprintf(label, sizeof(label), "%s", p);
2297     } else {
2298         snprintf(label, sizeof(label), "compat_monitor%d",
2299                  monitor_device_index);
2300         if (monitor_device_index == 0) {
2301             def = 1;
2302         }
2303         opts = qemu_chr_parse_compat(label, optarg);
2304         if (!opts) {
2305             fprintf(stderr, "parse error: %s\n", optarg);
2306             exit(1);
2307         }
2308     }
2309
2310     opts = qemu_opts_create(qemu_find_opts("mon"), label, 1, NULL);
2311     if (!opts) {
2312         fprintf(stderr, "duplicate chardev: %s\n", label);
2313         exit(1);
2314     }
2315     qemu_opt_set(opts, "mode", mode);
2316     qemu_opt_set(opts, "chardev", label);
2317     if (def)
2318         qemu_opt_set(opts, "default", "on");
2319     monitor_device_index++;
2320 }
2321
2322 struct device_config {
2323     enum {
2324         DEV_USB,       /* -usbdevice     */
2325         DEV_BT,        /* -bt            */
2326         DEV_SERIAL,    /* -serial        */
2327         DEV_PARALLEL,  /* -parallel      */
2328         DEV_VIRTCON,   /* -virtioconsole */
2329         DEV_DEBUGCON,  /* -debugcon */
2330         DEV_GDB,       /* -gdb, -s */
2331         DEV_SCLP,      /* s390 sclp */
2332     } type;
2333     const char *cmdline;
2334     Location loc;
2335     QTAILQ_ENTRY(device_config) next;
2336 };
2337
2338 static QTAILQ_HEAD(, device_config) device_configs =
2339     QTAILQ_HEAD_INITIALIZER(device_configs);
2340
2341 static void add_device_config(int type, const char *cmdline)
2342 {
2343     struct device_config *conf;
2344
2345     conf = g_malloc0(sizeof(*conf));
2346     conf->type = type;
2347     conf->cmdline = cmdline;
2348     loc_save(&conf->loc);
2349     QTAILQ_INSERT_TAIL(&device_configs, conf, next);
2350 }
2351
2352 static int foreach_device_config(int type, int (*func)(const char *cmdline))
2353 {
2354     struct device_config *conf;
2355     int rc;
2356
2357     QTAILQ_FOREACH(conf, &device_configs, next) {
2358         if (conf->type != type)
2359             continue;
2360         loc_push_restore(&conf->loc);
2361         rc = func(conf->cmdline);
2362         loc_pop(&conf->loc);
2363         if (rc) {
2364             return rc;
2365         }
2366     }
2367     return 0;
2368 }
2369
2370 static int serial_parse(const char *devname)
2371 {
2372     static int index = 0;
2373     char label[32];
2374
2375     if (strcmp(devname, "none") == 0)
2376         return 0;
2377     if (index == MAX_SERIAL_PORTS) {
2378         fprintf(stderr, "qemu: too many serial ports\n");
2379         exit(1);
2380     }
2381     snprintf(label, sizeof(label), "serial%d", index);
2382     serial_hds[index] = qemu_chr_new(label, devname, NULL);
2383     if (!serial_hds[index]) {
2384         fprintf(stderr, "qemu: could not connect serial device"
2385                 " to character backend '%s'\n", devname);
2386         return -1;
2387     }
2388     index++;
2389     return 0;
2390 }
2391
2392 static int parallel_parse(const char *devname)
2393 {
2394     static int index = 0;
2395     char label[32];
2396
2397     if (strcmp(devname, "none") == 0)
2398         return 0;
2399     if (index == MAX_PARALLEL_PORTS) {
2400         fprintf(stderr, "qemu: too many parallel ports\n");
2401         exit(1);
2402     }
2403     snprintf(label, sizeof(label), "parallel%d", index);
2404     parallel_hds[index] = qemu_chr_new(label, devname, NULL);
2405     if (!parallel_hds[index]) {
2406         fprintf(stderr, "qemu: could not connect parallel device"
2407                 " to character backend '%s'\n", devname);
2408         return -1;
2409     }
2410     index++;
2411     return 0;
2412 }
2413
2414 static int virtcon_parse(const char *devname)
2415 {
2416     QemuOptsList *device = qemu_find_opts("device");
2417     static int index = 0;
2418     char label[32];
2419     QemuOpts *bus_opts, *dev_opts;
2420
2421     if (strcmp(devname, "none") == 0)
2422         return 0;
2423     if (index == MAX_VIRTIO_CONSOLES) {
2424         fprintf(stderr, "qemu: too many virtio consoles\n");
2425         exit(1);
2426     }
2427
2428     bus_opts = qemu_opts_create(device, NULL, 0, &error_abort);
2429     if (arch_type == QEMU_ARCH_S390X) {
2430         qemu_opt_set(bus_opts, "driver", "virtio-serial-s390");
2431     } else {
2432         qemu_opt_set(bus_opts, "driver", "virtio-serial-pci");
2433     }
2434
2435     dev_opts = qemu_opts_create(device, NULL, 0, &error_abort);
2436     qemu_opt_set(dev_opts, "driver", "virtconsole");
2437
2438     snprintf(label, sizeof(label), "virtcon%d", index);
2439     virtcon_hds[index] = qemu_chr_new(label, devname, NULL);
2440     if (!virtcon_hds[index]) {
2441         fprintf(stderr, "qemu: could not connect virtio console"
2442                 " to character backend '%s'\n", devname);
2443         return -1;
2444     }
2445     qemu_opt_set(dev_opts, "chardev", label);
2446
2447     index++;
2448     return 0;
2449 }
2450
2451 static int sclp_parse(const char *devname)
2452 {
2453     QemuOptsList *device = qemu_find_opts("device");
2454     static int index = 0;
2455     char label[32];
2456     QemuOpts *dev_opts;
2457
2458     if (strcmp(devname, "none") == 0) {
2459         return 0;
2460     }
2461     if (index == MAX_SCLP_CONSOLES) {
2462         fprintf(stderr, "qemu: too many sclp consoles\n");
2463         exit(1);
2464     }
2465
2466     assert(arch_type == QEMU_ARCH_S390X);
2467
2468     dev_opts = qemu_opts_create(device, NULL, 0, NULL);
2469     qemu_opt_set(dev_opts, "driver", "sclpconsole");
2470
2471     snprintf(label, sizeof(label), "sclpcon%d", index);
2472     sclp_hds[index] = qemu_chr_new(label, devname, NULL);
2473     if (!sclp_hds[index]) {
2474         fprintf(stderr, "qemu: could not connect sclp console"
2475                 " to character backend '%s'\n", devname);
2476         return -1;
2477     }
2478     qemu_opt_set(dev_opts, "chardev", label);
2479
2480     index++;
2481     return 0;
2482 }
2483
2484 static int debugcon_parse(const char *devname)
2485 {
2486     QemuOpts *opts;
2487
2488     if (!qemu_chr_new("debugcon", devname, NULL)) {
2489         exit(1);
2490     }
2491     opts = qemu_opts_create(qemu_find_opts("device"), "debugcon", 1, NULL);
2492     if (!opts) {
2493         fprintf(stderr, "qemu: already have a debugcon device\n");
2494         exit(1);
2495     }
2496     qemu_opt_set(opts, "driver", "isa-debugcon");
2497     qemu_opt_set(opts, "chardev", "debugcon");
2498     return 0;
2499 }
2500
2501 static gint machine_class_cmp(gconstpointer a, gconstpointer b)
2502 {
2503     const MachineClass *mc1 = a, *mc2 = b;
2504     int res;
2505
2506     if (mc1->family == NULL) {
2507         if (mc2->family == NULL) {
2508             /* Compare standalone machine types against each other; they sort
2509              * in increasing order.
2510              */
2511             return strcmp(object_class_get_name(OBJECT_CLASS(mc1)),
2512                           object_class_get_name(OBJECT_CLASS(mc2)));
2513         }
2514
2515         /* Standalone machine types sort after families. */
2516         return 1;
2517     }
2518
2519     if (mc2->family == NULL) {
2520         /* Families sort before standalone machine types. */
2521         return -1;
2522     }
2523
2524     /* Families sort between each other alphabetically increasingly. */
2525     res = strcmp(mc1->family, mc2->family);
2526     if (res != 0) {
2527         return res;
2528     }
2529
2530     /* Within the same family, machine types sort in decreasing order. */
2531     return strcmp(object_class_get_name(OBJECT_CLASS(mc2)),
2532                   object_class_get_name(OBJECT_CLASS(mc1)));
2533 }
2534
2535  static MachineClass *machine_parse(const char *name)
2536 {
2537     MachineClass *mc = NULL;
2538     GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
2539
2540     if (name) {
2541         mc = find_machine(name);
2542     }
2543     if (mc) {
2544         return mc;
2545     }
2546     if (name && !is_help_option(name)) {
2547         error_report("Unsupported machine type");
2548         error_printf("Use -machine help to list supported machines!\n");
2549     } else {
2550         printf("Supported machines are:\n");
2551         machines = g_slist_sort(machines, machine_class_cmp);
2552         for (el = machines; el; el = el->next) {
2553             MachineClass *mc = el->data;
2554             if (mc->alias) {
2555                 printf("%-20s %s (alias of %s)\n", mc->alias, mc->desc, mc->name);
2556             }
2557             printf("%-20s %s%s\n", mc->name, mc->desc,
2558                    mc->is_default ? " (default)" : "");
2559         }
2560     }
2561
2562     g_slist_free(machines);
2563     exit(!name || !is_help_option(name));
2564 }
2565
2566 void qemu_add_exit_notifier(Notifier *notify)
2567 {
2568     notifier_list_add(&exit_notifiers, notify);
2569 }
2570
2571 void qemu_remove_exit_notifier(Notifier *notify)
2572 {
2573     notifier_remove(notify);
2574 }
2575
2576 static void qemu_run_exit_notifiers(void)
2577 {
2578     notifier_list_notify(&exit_notifiers, NULL);
2579 }
2580
2581 void qemu_add_machine_init_done_notifier(Notifier *notify)
2582 {
2583     notifier_list_add(&machine_init_done_notifiers, notify);
2584 }
2585
2586 static void qemu_run_machine_init_done_notifiers(void)
2587 {
2588     notifier_list_notify(&machine_init_done_notifiers, NULL);
2589 }
2590
2591 static const QEMUOption *lookup_opt(int argc, char **argv,
2592                                     const char **poptarg, int *poptind)
2593 {
2594     const QEMUOption *popt;
2595     int optind = *poptind;
2596     char *r = argv[optind];
2597     const char *optarg;
2598
2599     loc_set_cmdline(argv, optind, 1);
2600     optind++;
2601     /* Treat --foo the same as -foo.  */
2602     if (r[1] == '-')
2603         r++;
2604     popt = qemu_options;
2605     for(;;) {
2606         if (!popt->name) {
2607             error_report("invalid option");
2608             exit(1);
2609         }
2610         if (!strcmp(popt->name, r + 1))
2611             break;
2612         popt++;
2613     }
2614     if (popt->flags & HAS_ARG) {
2615         if (optind >= argc) {
2616             error_report("requires an argument");
2617             exit(1);
2618         }
2619         optarg = argv[optind++];
2620         loc_set_cmdline(argv, optind - 2, 2);
2621     } else {
2622         optarg = NULL;
2623     }
2624
2625     *poptarg = optarg;
2626     *poptind = optind;
2627
2628     return popt;
2629 }
2630
2631 static gpointer malloc_and_trace(gsize n_bytes)
2632 {
2633     void *ptr = malloc(n_bytes);
2634     trace_g_malloc(n_bytes, ptr);
2635     return ptr;
2636 }
2637
2638 static gpointer realloc_and_trace(gpointer mem, gsize n_bytes)
2639 {
2640     void *ptr = realloc(mem, n_bytes);
2641     trace_g_realloc(mem, n_bytes, ptr);
2642     return ptr;
2643 }
2644
2645 static void free_and_trace(gpointer mem)
2646 {
2647     trace_g_free(mem);
2648     free(mem);
2649 }
2650
2651 static int machine_set_property(const char *name, const char *value,
2652                                 void *opaque)
2653 {
2654     Object *obj = OBJECT(opaque);
2655     StringInputVisitor *siv;
2656     Error *local_err = NULL;
2657     char *c, *qom_name;
2658
2659     if (strcmp(name, "type") == 0) {
2660         return 0;
2661     }
2662
2663     qom_name = g_strdup(name);
2664     c = qom_name;
2665     while (*c++) {
2666         if (*c == '_') {
2667             *c = '-';
2668         }
2669     }
2670
2671     siv = string_input_visitor_new(value);
2672     object_property_set(obj, string_input_get_visitor(siv), qom_name, &local_err);
2673     string_input_visitor_cleanup(siv);
2674     g_free(qom_name);
2675
2676     if (local_err) {
2677         qerror_report_err(local_err);
2678         error_free(local_err);
2679         return -1;
2680     }
2681
2682     return 0;
2683 }
2684
2685 static int object_create(QemuOpts *opts, void *opaque)
2686 {
2687     Error *err = NULL;
2688     char *type = NULL;
2689     char *id = NULL;
2690     void *dummy = NULL;
2691     OptsVisitor *ov;
2692     QDict *pdict;
2693
2694     ov = opts_visitor_new(opts);
2695     pdict = qemu_opts_to_qdict(opts, NULL);
2696
2697     visit_start_struct(opts_get_visitor(ov), &dummy, NULL, NULL, 0, &err);
2698     if (err) {
2699         goto out;
2700     }
2701
2702     qdict_del(pdict, "qom-type");
2703     visit_type_str(opts_get_visitor(ov), &type, "qom-type", &err);
2704     if (err) {
2705         goto out;
2706     }
2707
2708     qdict_del(pdict, "id");
2709     visit_type_str(opts_get_visitor(ov), &id, "id", &err);
2710     if (err) {
2711         goto out;
2712     }
2713
2714     object_add(type, id, pdict, opts_get_visitor(ov), &err);
2715     if (err) {
2716         goto out;
2717     }
2718     visit_end_struct(opts_get_visitor(ov), &err);
2719     if (err) {
2720         qmp_object_del(id, NULL);
2721     }
2722
2723 out:
2724     opts_visitor_cleanup(ov);
2725
2726     QDECREF(pdict);
2727     g_free(id);
2728     g_free(type);
2729     g_free(dummy);
2730     if (err) {
2731         qerror_report_err(err);
2732         error_free(err);
2733         return -1;
2734     }
2735     return 0;
2736 }
2737
2738 int main(int argc, char **argv, char **envp)
2739 {
2740     int i;
2741     int snapshot, linux_boot;
2742     const char *initrd_filename;
2743     const char *kernel_filename, *kernel_cmdline;
2744     const char *boot_order;
2745     DisplayState *ds;
2746     int cyls, heads, secs, translation;
2747     QemuOpts *hda_opts = NULL, *opts, *machine_opts, *icount_opts = NULL;
2748     QemuOptsList *olist;
2749     int optind;
2750     const char *optarg;
2751     const char *loadvm = NULL;
2752     MachineClass *machine_class;
2753     const char *cpu_model;
2754     const char *vga_model = NULL;
2755     const char *qtest_chrdev = NULL;
2756     const char *qtest_log = NULL;
2757     const char *pid_file = NULL;
2758     const char *incoming = NULL;
2759 #ifdef CONFIG_VNC
2760     int show_vnc_port = 0;
2761 #endif
2762     bool defconfig = true;
2763     bool userconfig = true;
2764     const char *log_mask = NULL;
2765     const char *log_file = NULL;
2766     GMemVTable mem_trace = {
2767         .malloc = malloc_and_trace,
2768         .realloc = realloc_and_trace,
2769         .free = free_and_trace,
2770     };
2771     const char *trace_events = NULL;
2772     const char *trace_file = NULL;
2773     const ram_addr_t default_ram_size = (ram_addr_t)DEFAULT_RAM_SIZE *
2774                                         1024 * 1024;
2775     ram_addr_t maxram_size = default_ram_size;
2776     uint64_t ram_slots = 0;
2777     FILE *vmstate_dump_file = NULL;
2778     Error *main_loop_err = NULL;
2779
2780     atexit(qemu_run_exit_notifiers);
2781     error_set_progname(argv[0]);
2782     qemu_init_exec_dir(argv[0]);
2783
2784     g_mem_set_vtable(&mem_trace);
2785
2786     module_call_init(MODULE_INIT_QOM);
2787
2788     qemu_add_opts(&qemu_drive_opts);
2789     qemu_add_drive_opts(&qemu_legacy_drive_opts);
2790     qemu_add_drive_opts(&qemu_common_drive_opts);
2791     qemu_add_drive_opts(&qemu_drive_opts);
2792     qemu_add_opts(&qemu_chardev_opts);
2793     qemu_add_opts(&qemu_device_opts);
2794     qemu_add_opts(&qemu_netdev_opts);
2795     qemu_add_opts(&qemu_net_opts);
2796     qemu_add_opts(&qemu_rtc_opts);
2797     qemu_add_opts(&qemu_global_opts);
2798     qemu_add_opts(&qemu_mon_opts);
2799     qemu_add_opts(&qemu_trace_opts);
2800     qemu_add_opts(&qemu_option_rom_opts);
2801     qemu_add_opts(&qemu_machine_opts);
2802     qemu_add_opts(&qemu_mem_opts);
2803     qemu_add_opts(&qemu_smp_opts);
2804     qemu_add_opts(&qemu_boot_opts);
2805     qemu_add_opts(&qemu_sandbox_opts);
2806     qemu_add_opts(&qemu_add_fd_opts);
2807     qemu_add_opts(&qemu_object_opts);
2808     qemu_add_opts(&qemu_tpmdev_opts);
2809     qemu_add_opts(&qemu_realtime_opts);
2810     qemu_add_opts(&qemu_msg_opts);
2811     qemu_add_opts(&qemu_name_opts);
2812     qemu_add_opts(&qemu_numa_opts);
2813     qemu_add_opts(&qemu_icount_opts);
2814
2815     runstate_init();
2816
2817     rtc_clock = QEMU_CLOCK_HOST;
2818
2819     QLIST_INIT (&vm_change_state_head);
2820     os_setup_early_signal_handling();
2821
2822     module_call_init(MODULE_INIT_MACHINE);
2823     machine_class = find_default_machine();
2824     cpu_model = NULL;
2825     ram_size = default_ram_size;
2826     snapshot = 0;
2827     cyls = heads = secs = 0;
2828     translation = BIOS_ATA_TRANSLATION_AUTO;
2829
2830     for (i = 0; i < MAX_NODES; i++) {
2831         numa_info[i].node_mem = 0;
2832         numa_info[i].present = false;
2833         bitmap_zero(numa_info[i].node_cpu, MAX_CPUMASK_BITS);
2834     }
2835
2836     nb_numa_nodes = 0;
2837     max_numa_nodeid = 0;
2838     nb_nics = 0;
2839
2840     bdrv_init_with_whitelist();
2841
2842     autostart = 1;
2843
2844     /* first pass of option parsing */
2845     optind = 1;
2846     while (optind < argc) {
2847         if (argv[optind][0] != '-') {
2848             /* disk image */
2849             optind++;
2850         } else {
2851             const QEMUOption *popt;
2852
2853             popt = lookup_opt(argc, argv, &optarg, &optind);
2854             switch (popt->index) {
2855             case QEMU_OPTION_nodefconfig:
2856                 defconfig = false;
2857                 break;
2858             case QEMU_OPTION_nouserconfig:
2859                 userconfig = false;
2860                 break;
2861             }
2862         }
2863     }
2864
2865     if (defconfig) {
2866         int ret;
2867         ret = qemu_read_default_config_files(userconfig);
2868         if (ret < 0) {
2869             exit(1);
2870         }
2871     }
2872
2873     /* second pass of option parsing */
2874     optind = 1;
2875     for(;;) {
2876         if (optind >= argc)
2877             break;
2878         if (argv[optind][0] != '-') {
2879             hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
2880         } else {
2881             const QEMUOption *popt;
2882
2883             popt = lookup_opt(argc, argv, &optarg, &optind);
2884             if (!(popt->arch_mask & arch_type)) {
2885                 printf("Option %s not supported for this target\n", popt->name);
2886                 exit(1);
2887             }
2888             switch(popt->index) {
2889             case QEMU_OPTION_M:
2890                 machine_class = machine_parse(optarg);
2891                 break;
2892             case QEMU_OPTION_no_kvm_irqchip: {
2893                 olist = qemu_find_opts("machine");
2894                 qemu_opts_parse(olist, "kernel_irqchip=off", 0);
2895                 break;
2896             }
2897             case QEMU_OPTION_cpu:
2898                 /* hw initialization will check this */
2899                 cpu_model = optarg;
2900                 break;
2901             case QEMU_OPTION_hda:
2902                 {
2903                     char buf[256];
2904                     if (cyls == 0)
2905                         snprintf(buf, sizeof(buf), "%s", HD_OPTS);
2906                     else
2907                         snprintf(buf, sizeof(buf),
2908                                  "%s,cyls=%d,heads=%d,secs=%d%s",
2909                                  HD_OPTS , cyls, heads, secs,
2910                                  translation == BIOS_ATA_TRANSLATION_LBA ?
2911                                  ",trans=lba" :
2912                                  translation == BIOS_ATA_TRANSLATION_NONE ?
2913                                  ",trans=none" : "");
2914                     drive_add(IF_DEFAULT, 0, optarg, buf);
2915                     break;
2916                 }
2917             case QEMU_OPTION_hdb:
2918             case QEMU_OPTION_hdc:
2919             case QEMU_OPTION_hdd:
2920                 drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg,
2921                           HD_OPTS);
2922                 break;
2923             case QEMU_OPTION_drive:
2924                 if (drive_def(optarg) == NULL) {
2925                     exit(1);
2926                 }
2927                 break;
2928             case QEMU_OPTION_set:
2929                 if (qemu_set_option(optarg) != 0)
2930                     exit(1);
2931                 break;
2932             case QEMU_OPTION_global:
2933                 if (qemu_global_option(optarg) != 0)
2934                     exit(1);
2935                 break;
2936             case QEMU_OPTION_mtdblock:
2937                 drive_add(IF_MTD, -1, optarg, MTD_OPTS);
2938                 break;
2939             case QEMU_OPTION_sd:
2940                 drive_add(IF_SD, -1, optarg, SD_OPTS);
2941                 break;
2942             case QEMU_OPTION_pflash:
2943                 drive_add(IF_PFLASH, -1, optarg, PFLASH_OPTS);
2944                 break;
2945             case QEMU_OPTION_snapshot:
2946                 snapshot = 1;
2947                 break;
2948             case QEMU_OPTION_hdachs:
2949                 {
2950                     const char *p;
2951                     p = optarg;
2952                     cyls = strtol(p, (char **)&p, 0);
2953                     if (cyls < 1 || cyls > 16383)
2954                         goto chs_fail;
2955                     if (*p != ',')
2956                         goto chs_fail;
2957                     p++;
2958                     heads = strtol(p, (char **)&p, 0);
2959                     if (heads < 1 || heads > 16)
2960                         goto chs_fail;
2961                     if (*p != ',')
2962                         goto chs_fail;
2963                     p++;
2964                     secs = strtol(p, (char **)&p, 0);
2965                     if (secs < 1 || secs > 63)
2966                         goto chs_fail;
2967                     if (*p == ',') {
2968                         p++;
2969                         if (!strcmp(p, "large")) {
2970                             translation = BIOS_ATA_TRANSLATION_LARGE;
2971                         } else if (!strcmp(p, "rechs")) {
2972                             translation = BIOS_ATA_TRANSLATION_RECHS;
2973                         } else if (!strcmp(p, "none")) {
2974                             translation = BIOS_ATA_TRANSLATION_NONE;
2975                         } else if (!strcmp(p, "lba")) {
2976                             translation = BIOS_ATA_TRANSLATION_LBA;
2977                         } else if (!strcmp(p, "auto")) {
2978                             translation = BIOS_ATA_TRANSLATION_AUTO;
2979                         } else {
2980                             goto chs_fail;
2981                         }
2982                     } else if (*p != '\0') {
2983                     chs_fail:
2984                         fprintf(stderr, "qemu: invalid physical CHS format\n");
2985                         exit(1);
2986                     }
2987                     if (hda_opts != NULL) {
2988                         char num[16];
2989                         snprintf(num, sizeof(num), "%d", cyls);
2990                         qemu_opt_set(hda_opts, "cyls", num);
2991                         snprintf(num, sizeof(num), "%d", heads);
2992                         qemu_opt_set(hda_opts, "heads", num);
2993                         snprintf(num, sizeof(num), "%d", secs);
2994                         qemu_opt_set(hda_opts, "secs", num);
2995                         if (translation == BIOS_ATA_TRANSLATION_LARGE) {
2996                             qemu_opt_set(hda_opts, "trans", "large");
2997                         } else if (translation == BIOS_ATA_TRANSLATION_RECHS) {
2998                             qemu_opt_set(hda_opts, "trans", "rechs");
2999                         } else if (translation == BIOS_ATA_TRANSLATION_LBA) {
3000                             qemu_opt_set(hda_opts, "trans", "lba");
3001                         } else if (translation == BIOS_ATA_TRANSLATION_NONE) {
3002                             qemu_opt_set(hda_opts, "trans", "none");
3003                         }
3004                     }
3005                 }
3006                 break;
3007             case QEMU_OPTION_numa:
3008                 opts = qemu_opts_parse(qemu_find_opts("numa"), optarg, 1);
3009                 if (!opts) {
3010                     exit(1);
3011                 }
3012                 break;
3013             case QEMU_OPTION_display:
3014                 display_type = select_display(optarg);
3015                 break;
3016             case QEMU_OPTION_nographic:
3017                 display_type = DT_NOGRAPHIC;
3018                 break;
3019             case QEMU_OPTION_curses:
3020 #ifdef CONFIG_CURSES
3021                 display_type = DT_CURSES;
3022 #else
3023                 fprintf(stderr, "Curses support is disabled\n");
3024                 exit(1);
3025 #endif
3026                 break;
3027             case QEMU_OPTION_portrait:
3028                 graphic_rotate = 90;
3029                 break;
3030             case QEMU_OPTION_rotate:
3031                 graphic_rotate = strtol(optarg, (char **) &optarg, 10);
3032                 if (graphic_rotate != 0 && graphic_rotate != 90 &&
3033                     graphic_rotate != 180 && graphic_rotate != 270) {
3034                     fprintf(stderr,
3035                         "qemu: only 90, 180, 270 deg rotation is available\n");
3036                     exit(1);
3037                 }
3038                 break;
3039             case QEMU_OPTION_kernel:
3040                 qemu_opts_set(qemu_find_opts("machine"), 0, "kernel", optarg);
3041                 break;
3042             case QEMU_OPTION_initrd:
3043                 qemu_opts_set(qemu_find_opts("machine"), 0, "initrd", optarg);
3044                 break;
3045             case QEMU_OPTION_append:
3046                 qemu_opts_set(qemu_find_opts("machine"), 0, "append", optarg);
3047                 break;
3048             case QEMU_OPTION_dtb:
3049                 qemu_opts_set(qemu_find_opts("machine"), 0, "dtb", optarg);
3050                 break;
3051             case QEMU_OPTION_cdrom:
3052                 drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS);
3053                 break;
3054             case QEMU_OPTION_boot:
3055                 opts = qemu_opts_parse(qemu_find_opts("boot-opts"), optarg, 1);
3056                 if (!opts) {
3057                     exit(1);
3058                 }
3059                 break;
3060             case QEMU_OPTION_fda:
3061             case QEMU_OPTION_fdb:
3062                 drive_add(IF_FLOPPY, popt->index - QEMU_OPTION_fda,
3063                           optarg, FD_OPTS);
3064                 break;
3065             case QEMU_OPTION_no_fd_bootchk:
3066                 fd_bootchk = 0;
3067                 break;
3068             case QEMU_OPTION_netdev:
3069                 if (net_client_parse(qemu_find_opts("netdev"), optarg) == -1) {
3070                     exit(1);
3071                 }
3072                 break;
3073             case QEMU_OPTION_net:
3074                 if (net_client_parse(qemu_find_opts("net"), optarg) == -1) {
3075                     exit(1);
3076                 }
3077                 break;
3078 #ifdef CONFIG_LIBISCSI
3079             case QEMU_OPTION_iscsi:
3080                 opts = qemu_opts_parse(qemu_find_opts("iscsi"), optarg, 0);
3081                 if (!opts) {
3082                     exit(1);
3083                 }
3084                 break;
3085 #endif
3086 #ifdef CONFIG_SLIRP
3087             case QEMU_OPTION_tftp:
3088                 legacy_tftp_prefix = optarg;
3089                 break;
3090             case QEMU_OPTION_bootp:
3091                 legacy_bootp_filename = optarg;
3092                 break;
3093             case QEMU_OPTION_redir:
3094                 if (net_slirp_redir(optarg) < 0)
3095                     exit(1);
3096                 break;
3097 #endif
3098             case QEMU_OPTION_bt:
3099                 add_device_config(DEV_BT, optarg);
3100                 break;
3101             case QEMU_OPTION_audio_help:
3102                 AUD_help ();
3103                 exit (0);
3104                 break;
3105             case QEMU_OPTION_soundhw:
3106                 select_soundhw (optarg);
3107                 break;
3108             case QEMU_OPTION_h:
3109                 help(0);
3110                 break;
3111             case QEMU_OPTION_version:
3112                 version();
3113                 exit(0);
3114                 break;
3115             case QEMU_OPTION_m: {
3116                 uint64_t sz;
3117                 const char *mem_str;
3118                 const char *maxmem_str, *slots_str;
3119
3120                 opts = qemu_opts_parse(qemu_find_opts("memory"),
3121                                        optarg, 1);
3122                 if (!opts) {
3123                     exit(EXIT_FAILURE);
3124                 }
3125
3126                 mem_str = qemu_opt_get(opts, "size");
3127                 if (!mem_str) {
3128                     error_report("invalid -m option, missing 'size' option");
3129                     exit(EXIT_FAILURE);
3130                 }
3131                 if (!*mem_str) {
3132                     error_report("missing 'size' option value");
3133                     exit(EXIT_FAILURE);
3134                 }
3135
3136                 sz = qemu_opt_get_size(opts, "size", ram_size);
3137
3138                 /* Fix up legacy suffix-less format */
3139                 if (g_ascii_isdigit(mem_str[strlen(mem_str) - 1])) {
3140                     uint64_t overflow_check = sz;
3141
3142                     sz <<= 20;
3143                     if ((sz >> 20) != overflow_check) {
3144                         error_report("too large 'size' option value");
3145                         exit(EXIT_FAILURE);
3146                     }
3147                 }
3148
3149                 /* backward compatibility behaviour for case "-m 0" */
3150                 if (sz == 0) {
3151                     sz = default_ram_size;
3152                 }
3153
3154                 sz = QEMU_ALIGN_UP(sz, 8192);
3155                 ram_size = sz;
3156                 if (ram_size != sz) {
3157                     error_report("ram size too large");
3158                     exit(EXIT_FAILURE);
3159                 }
3160                 maxram_size = ram_size;
3161
3162                 maxmem_str = qemu_opt_get(opts, "maxmem");
3163                 slots_str = qemu_opt_get(opts, "slots");
3164                 if (maxmem_str && slots_str) {
3165                     uint64_t slots;
3166
3167                     sz = qemu_opt_get_size(opts, "maxmem", 0);
3168                     if (sz < ram_size) {
3169                         error_report("invalid -m option value: maxmem "
3170                                 "(0x%" PRIx64 ") <= initial memory (0x"
3171                                 RAM_ADDR_FMT ")", sz, ram_size);
3172                         exit(EXIT_FAILURE);
3173                     }
3174
3175                     slots = qemu_opt_get_number(opts, "slots", 0);
3176                     if ((sz > ram_size) && !slots) {
3177                         error_report("invalid -m option value: maxmem "
3178                                 "(0x%" PRIx64 ") more than initial memory (0x"
3179                                 RAM_ADDR_FMT ") but no hotplug slots where "
3180                                 "specified", sz, ram_size);
3181                         exit(EXIT_FAILURE);
3182                     }
3183
3184                     if ((sz <= ram_size) && slots) {
3185                         error_report("invalid -m option value:  %"
3186                                 PRIu64 " hotplug slots where specified but "
3187                                 "maxmem (0x%" PRIx64 ") <= initial memory (0x"
3188                                 RAM_ADDR_FMT ")", slots, sz, ram_size);
3189                         exit(EXIT_FAILURE);
3190                     }
3191                     maxram_size = sz;
3192                     ram_slots = slots;
3193                 } else if ((!maxmem_str && slots_str) ||
3194                            (maxmem_str && !slots_str)) {
3195                     error_report("invalid -m option value: missing "
3196                             "'%s' option", slots_str ? "maxmem" : "slots");
3197                     exit(EXIT_FAILURE);
3198                 }
3199                 break;
3200             }
3201 #ifdef CONFIG_TPM
3202             case QEMU_OPTION_tpmdev:
3203                 if (tpm_config_parse(qemu_find_opts("tpmdev"), optarg) < 0) {
3204                     exit(1);
3205                 }
3206                 break;
3207 #endif
3208             case QEMU_OPTION_mempath:
3209                 mem_path = optarg;
3210                 break;
3211             case QEMU_OPTION_mem_prealloc:
3212                 mem_prealloc = 1;
3213                 break;
3214             case QEMU_OPTION_d:
3215                 log_mask = optarg;
3216                 break;
3217             case QEMU_OPTION_D:
3218                 log_file = optarg;
3219                 break;
3220             case QEMU_OPTION_s:
3221                 add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT);
3222                 break;
3223             case QEMU_OPTION_gdb:
3224                 add_device_config(DEV_GDB, optarg);
3225                 break;
3226             case QEMU_OPTION_L:
3227                 if (data_dir_idx < ARRAY_SIZE(data_dir)) {
3228                     data_dir[data_dir_idx++] = optarg;
3229                 }
3230                 break;
3231             case QEMU_OPTION_bios:
3232                 qemu_opts_set(qemu_find_opts("machine"), 0, "firmware", optarg);
3233                 break;
3234             case QEMU_OPTION_singlestep:
3235                 singlestep = 1;
3236                 break;
3237             case QEMU_OPTION_S:
3238                 autostart = 0;
3239                 break;
3240             case QEMU_OPTION_k:
3241                 keyboard_layout = optarg;
3242                 break;
3243             case QEMU_OPTION_localtime:
3244                 rtc_utc = 0;
3245                 break;
3246             case QEMU_OPTION_vga:
3247                 vga_model = optarg;
3248                 default_vga = 0;
3249                 break;
3250             case QEMU_OPTION_g:
3251                 {
3252                     const char *p;
3253                     int w, h, depth;
3254                     p = optarg;
3255                     w = strtol(p, (char **)&p, 10);
3256                     if (w <= 0) {
3257                     graphic_error:
3258                         fprintf(stderr, "qemu: invalid resolution or depth\n");
3259                         exit(1);
3260                     }
3261                     if (*p != 'x')
3262                         goto graphic_error;
3263                     p++;
3264                     h = strtol(p, (char **)&p, 10);
3265                     if (h <= 0)
3266                         goto graphic_error;
3267                     if (*p == 'x') {
3268                         p++;
3269                         depth = strtol(p, (char **)&p, 10);
3270                         if (depth != 8 && depth != 15 && depth != 16 &&
3271                             depth != 24 && depth != 32)
3272                             goto graphic_error;
3273                     } else if (*p == '\0') {
3274                         depth = graphic_depth;
3275                     } else {
3276                         goto graphic_error;
3277                     }
3278
3279                     graphic_width = w;
3280                     graphic_height = h;
3281                     graphic_depth = depth;
3282                 }
3283                 break;
3284             case QEMU_OPTION_echr:
3285                 {
3286                     char *r;
3287                     term_escape_char = strtol(optarg, &r, 0);
3288                     if (r == optarg)
3289                         printf("Bad argument to echr\n");
3290                     break;
3291                 }
3292             case QEMU_OPTION_monitor:
3293                 default_monitor = 0;
3294                 if (strncmp(optarg, "none", 4)) {
3295                     monitor_parse(optarg, "readline");
3296                 }
3297                 break;
3298             case QEMU_OPTION_qmp:
3299                 monitor_parse(optarg, "control");
3300                 default_monitor = 0;
3301                 break;
3302             case QEMU_OPTION_mon:
3303                 opts = qemu_opts_parse(qemu_find_opts("mon"), optarg, 1);
3304                 if (!opts) {
3305                     exit(1);
3306                 }
3307                 default_monitor = 0;
3308                 break;
3309             case QEMU_OPTION_chardev:
3310                 opts = qemu_opts_parse(qemu_find_opts("chardev"), optarg, 1);
3311                 if (!opts) {
3312                     exit(1);
3313                 }
3314                 break;
3315             case QEMU_OPTION_fsdev:
3316                 olist = qemu_find_opts("fsdev");
3317                 if (!olist) {
3318                     fprintf(stderr, "fsdev is not supported by this qemu build.\n");
3319                     exit(1);
3320                 }
3321                 opts = qemu_opts_parse(olist, optarg, 1);
3322                 if (!opts) {
3323                     exit(1);
3324                 }
3325                 break;
3326             case QEMU_OPTION_virtfs: {
3327                 QemuOpts *fsdev;
3328                 QemuOpts *device;
3329                 const char *writeout, *sock_fd, *socket;
3330
3331                 olist = qemu_find_opts("virtfs");
3332                 if (!olist) {
3333                     fprintf(stderr, "virtfs is not supported by this qemu build.\n");
3334                     exit(1);
3335                 }
3336                 opts = qemu_opts_parse(olist, optarg, 1);
3337                 if (!opts) {
3338                     exit(1);
3339                 }
3340
3341                 if (qemu_opt_get(opts, "fsdriver") == NULL ||
3342                     qemu_opt_get(opts, "mount_tag") == NULL) {
3343                     fprintf(stderr, "Usage: -virtfs fsdriver,mount_tag=tag.\n");
3344                     exit(1);
3345                 }
3346                 fsdev = qemu_opts_create(qemu_find_opts("fsdev"),
3347                                          qemu_opt_get(opts, "mount_tag"),
3348                                          1, NULL);
3349                 if (!fsdev) {
3350                     fprintf(stderr, "duplicate fsdev id: %s\n",
3351                             qemu_opt_get(opts, "mount_tag"));
3352                     exit(1);
3353                 }
3354
3355                 writeout = qemu_opt_get(opts, "writeout");
3356                 if (writeout) {
3357 #ifdef CONFIG_SYNC_FILE_RANGE
3358                     qemu_opt_set(fsdev, "writeout", writeout);
3359 #else
3360                     fprintf(stderr, "writeout=immediate not supported on "
3361                             "this platform\n");
3362                     exit(1);
3363 #endif
3364                 }
3365                 qemu_opt_set(fsdev, "fsdriver", qemu_opt_get(opts, "fsdriver"));
3366                 qemu_opt_set(fsdev, "path", qemu_opt_get(opts, "path"));
3367                 qemu_opt_set(fsdev, "security_model",
3368                              qemu_opt_get(opts, "security_model"));
3369                 socket = qemu_opt_get(opts, "socket");
3370                 if (socket) {
3371                     qemu_opt_set(fsdev, "socket", socket);
3372                 }
3373                 sock_fd = qemu_opt_get(opts, "sock_fd");
3374                 if (sock_fd) {
3375                     qemu_opt_set(fsdev, "sock_fd", sock_fd);
3376                 }
3377
3378                 qemu_opt_set_bool(fsdev, "readonly",
3379                                 qemu_opt_get_bool(opts, "readonly", 0));
3380                 device = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
3381                                           &error_abort);
3382                 qemu_opt_set(device, "driver", "virtio-9p-pci");
3383                 qemu_opt_set(device, "fsdev",
3384                              qemu_opt_get(opts, "mount_tag"));
3385                 qemu_opt_set(device, "mount_tag",
3386                              qemu_opt_get(opts, "mount_tag"));
3387                 break;
3388             }
3389             case QEMU_OPTION_virtfs_synth: {
3390                 QemuOpts *fsdev;
3391                 QemuOpts *device;
3392
3393                 fsdev = qemu_opts_create(qemu_find_opts("fsdev"), "v_synth",
3394                                          1, NULL);
3395                 if (!fsdev) {
3396                     fprintf(stderr, "duplicate option: %s\n", "virtfs_synth");
3397                     exit(1);
3398                 }
3399                 qemu_opt_set(fsdev, "fsdriver", "synth");
3400
3401                 device = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
3402                                           &error_abort);
3403                 qemu_opt_set(device, "driver", "virtio-9p-pci");
3404                 qemu_opt_set(device, "fsdev", "v_synth");
3405                 qemu_opt_set(device, "mount_tag", "v_synth");
3406                 break;
3407             }
3408             case QEMU_OPTION_serial:
3409                 add_device_config(DEV_SERIAL, optarg);
3410                 default_serial = 0;
3411                 if (strncmp(optarg, "mon:", 4) == 0) {
3412                     default_monitor = 0;
3413                 }
3414                 break;
3415             case QEMU_OPTION_watchdog:
3416                 if (watchdog) {
3417                     fprintf(stderr,
3418                             "qemu: only one watchdog option may be given\n");
3419                     return 1;
3420                 }
3421                 watchdog = optarg;
3422                 break;
3423             case QEMU_OPTION_watchdog_action:
3424                 if (select_watchdog_action(optarg) == -1) {
3425                     fprintf(stderr, "Unknown -watchdog-action parameter\n");
3426                     exit(1);
3427                 }
3428                 break;
3429             case QEMU_OPTION_virtiocon:
3430                 add_device_config(DEV_VIRTCON, optarg);
3431                 default_virtcon = 0;
3432                 if (strncmp(optarg, "mon:", 4) == 0) {
3433                     default_monitor = 0;
3434                 }
3435                 break;
3436             case QEMU_OPTION_parallel:
3437                 add_device_config(DEV_PARALLEL, optarg);
3438                 default_parallel = 0;
3439                 if (strncmp(optarg, "mon:", 4) == 0) {
3440                     default_monitor = 0;
3441                 }
3442                 break;
3443             case QEMU_OPTION_debugcon:
3444                 add_device_config(DEV_DEBUGCON, optarg);
3445                 break;
3446             case QEMU_OPTION_loadvm:
3447                 loadvm = optarg;
3448                 break;
3449             case QEMU_OPTION_full_screen:
3450                 full_screen = 1;
3451                 break;
3452             case QEMU_OPTION_no_frame:
3453                 no_frame = 1;
3454                 break;
3455             case QEMU_OPTION_alt_grab:
3456                 alt_grab = 1;
3457                 break;
3458             case QEMU_OPTION_ctrl_grab:
3459                 ctrl_grab = 1;
3460                 break;
3461             case QEMU_OPTION_no_quit:
3462                 no_quit = 1;
3463                 break;
3464             case QEMU_OPTION_sdl:
3465 #ifdef CONFIG_SDL
3466                 display_type = DT_SDL;
3467                 break;
3468 #else
3469                 fprintf(stderr, "SDL support is disabled\n");
3470                 exit(1);
3471 #endif
3472             case QEMU_OPTION_pidfile:
3473                 pid_file = optarg;
3474                 break;
3475             case QEMU_OPTION_win2k_hack:
3476                 win2k_install_hack = 1;
3477                 break;
3478             case QEMU_OPTION_rtc_td_hack: {
3479                 static GlobalProperty slew_lost_ticks[] = {
3480                     {
3481                         .driver   = "mc146818rtc",
3482                         .property = "lost_tick_policy",
3483                         .value    = "slew",
3484                     },
3485                     { /* end of list */ }
3486                 };
3487
3488                 qdev_prop_register_global_list(slew_lost_ticks);
3489                 break;
3490             }
3491             case QEMU_OPTION_acpitable:
3492                 opts = qemu_opts_parse(qemu_find_opts("acpi"), optarg, 1);
3493                 if (!opts) {
3494                     exit(1);
3495                 }
3496                 do_acpitable_option(opts);
3497                 break;
3498             case QEMU_OPTION_smbios:
3499                 opts = qemu_opts_parse(qemu_find_opts("smbios"), optarg, 0);
3500                 if (!opts) {
3501                     exit(1);
3502                 }
3503                 do_smbios_option(opts);
3504                 break;
3505             case QEMU_OPTION_enable_kvm:
3506                 olist = qemu_find_opts("machine");
3507                 qemu_opts_parse(olist, "accel=kvm", 0);
3508                 break;
3509             case QEMU_OPTION_machine:
3510                 olist = qemu_find_opts("machine");
3511                 opts = qemu_opts_parse(olist, optarg, 1);
3512                 if (!opts) {
3513                     exit(1);
3514                 }
3515                 optarg = qemu_opt_get(opts, "type");
3516                 if (optarg) {
3517                     machine_class = machine_parse(optarg);
3518                 }
3519                 break;
3520              case QEMU_OPTION_no_kvm:
3521                 olist = qemu_find_opts("machine");
3522                 qemu_opts_parse(olist, "accel=tcg", 0);
3523                 break;
3524             case QEMU_OPTION_no_kvm_pit: {
3525                 fprintf(stderr, "Warning: KVM PIT can no longer be disabled "
3526                                 "separately.\n");
3527                 break;
3528             }
3529             case QEMU_OPTION_no_kvm_pit_reinjection: {
3530                 static GlobalProperty kvm_pit_lost_tick_policy[] = {
3531                     {
3532                         .driver   = "kvm-pit",
3533                         .property = "lost_tick_policy",
3534                         .value    = "discard",
3535                     },
3536                     { /* end of list */ }
3537                 };
3538
3539                 fprintf(stderr, "Warning: option deprecated, use "
3540                         "lost_tick_policy property of kvm-pit instead.\n");
3541                 qdev_prop_register_global_list(kvm_pit_lost_tick_policy);
3542                 break;
3543             }
3544             case QEMU_OPTION_usb:
3545                 olist = qemu_find_opts("machine");
3546                 qemu_opts_parse(olist, "usb=on", 0);
3547                 break;
3548             case QEMU_OPTION_usbdevice:
3549                 olist = qemu_find_opts("machine");
3550                 qemu_opts_parse(olist, "usb=on", 0);
3551                 add_device_config(DEV_USB, optarg);
3552                 break;
3553             case QEMU_OPTION_device:
3554                 if (!qemu_opts_parse(qemu_find_opts("device"), optarg, 1)) {
3555                     exit(1);
3556                 }
3557                 break;
3558             case QEMU_OPTION_smp:
3559                 if (!qemu_opts_parse(qemu_find_opts("smp-opts"), optarg, 1)) {
3560                     exit(1);
3561                 }
3562                 break;
3563             case QEMU_OPTION_vnc:
3564 #ifdef CONFIG_VNC
3565                 display_remote++;
3566                 vnc_display = optarg;
3567 #else
3568                 fprintf(stderr, "VNC support is disabled\n");
3569                 exit(1);
3570 #endif
3571                 break;
3572             case QEMU_OPTION_no_acpi:
3573                 acpi_enabled = 0;
3574                 break;
3575             case QEMU_OPTION_no_hpet:
3576                 no_hpet = 1;
3577                 break;
3578             case QEMU_OPTION_balloon:
3579                 if (balloon_parse(optarg) < 0) {
3580                     fprintf(stderr, "Unknown -balloon argument %s\n", optarg);
3581                     exit(1);
3582                 }
3583                 break;
3584             case QEMU_OPTION_no_reboot:
3585                 no_reboot = 1;
3586                 break;
3587             case QEMU_OPTION_no_shutdown:
3588                 no_shutdown = 1;
3589                 break;
3590             case QEMU_OPTION_show_cursor:
3591                 cursor_hide = 0;
3592                 break;
3593             case QEMU_OPTION_uuid:
3594                 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
3595                     fprintf(stderr, "Fail to parse UUID string."
3596                             " Wrong format.\n");
3597                     exit(1);
3598                 }
3599                 qemu_uuid_set = true;
3600                 break;
3601             case QEMU_OPTION_option_rom:
3602                 if (nb_option_roms >= MAX_OPTION_ROMS) {
3603                     fprintf(stderr, "Too many option ROMs\n");
3604                     exit(1);
3605                 }
3606                 opts = qemu_opts_parse(qemu_find_opts("option-rom"), optarg, 1);
3607                 if (!opts) {
3608                     exit(1);
3609                 }
3610                 option_rom[nb_option_roms].name = qemu_opt_get(opts, "romfile");
3611                 option_rom[nb_option_roms].bootindex =
3612                     qemu_opt_get_number(opts, "bootindex", -1);
3613                 if (!option_rom[nb_option_roms].name) {
3614                     fprintf(stderr, "Option ROM file is not specified\n");
3615                     exit(1);
3616                 }
3617                 nb_option_roms++;
3618                 break;
3619             case QEMU_OPTION_semihosting:
3620                 semihosting_enabled = 1;
3621                 break;
3622             case QEMU_OPTION_tdf:
3623                 fprintf(stderr, "Warning: user space PIT time drift fix "
3624                                 "is no longer supported.\n");
3625                 break;
3626             case QEMU_OPTION_name:
3627                 opts = qemu_opts_parse(qemu_find_opts("name"), optarg, 1);
3628                 if (!opts) {
3629                     exit(1);
3630                 }
3631                 break;
3632             case QEMU_OPTION_prom_env:
3633                 if (nb_prom_envs >= MAX_PROM_ENVS) {
3634                     fprintf(stderr, "Too many prom variables\n");
3635                     exit(1);
3636                 }
3637                 prom_envs[nb_prom_envs] = optarg;
3638                 nb_prom_envs++;
3639                 break;
3640             case QEMU_OPTION_old_param:
3641                 old_param = 1;
3642                 break;
3643             case QEMU_OPTION_clock:
3644                 /* Clock options no longer exist.  Keep this option for
3645                  * backward compatibility.
3646                  */
3647                 break;
3648             case QEMU_OPTION_startdate:
3649                 configure_rtc_date_offset(optarg, 1);
3650                 break;
3651             case QEMU_OPTION_rtc:
3652                 opts = qemu_opts_parse(qemu_find_opts("rtc"), optarg, 0);
3653                 if (!opts) {
3654                     exit(1);
3655                 }
3656                 configure_rtc(opts);
3657                 break;
3658             case QEMU_OPTION_tb_size:
3659                 tcg_tb_size = strtol(optarg, NULL, 0);
3660                 if (tcg_tb_size < 0) {
3661                     tcg_tb_size = 0;
3662                 }
3663                 break;
3664             case QEMU_OPTION_icount:
3665                 icount_opts = qemu_opts_parse(qemu_find_opts("icount"),
3666                                               optarg, 1);
3667                 if (!icount_opts) {
3668                     exit(1);
3669                 }
3670                 break;
3671             case QEMU_OPTION_incoming:
3672                 incoming = optarg;
3673                 runstate_set(RUN_STATE_INMIGRATE);
3674                 break;
3675             case QEMU_OPTION_nodefaults:
3676                 has_defaults = 0;
3677                 break;
3678             case QEMU_OPTION_xen_domid:
3679                 if (!(xen_available())) {
3680                     printf("Option %s not supported for this target\n", popt->name);
3681                     exit(1);
3682                 }
3683                 xen_domid = atoi(optarg);
3684                 break;
3685             case QEMU_OPTION_xen_create:
3686                 if (!(xen_available())) {
3687                     printf("Option %s not supported for this target\n", popt->name);
3688                     exit(1);
3689                 }
3690                 xen_mode = XEN_CREATE;
3691                 break;
3692             case QEMU_OPTION_xen_attach:
3693                 if (!(xen_available())) {
3694                     printf("Option %s not supported for this target\n", popt->name);
3695                     exit(1);
3696                 }
3697                 xen_mode = XEN_ATTACH;
3698                 break;
3699             case QEMU_OPTION_trace:
3700             {
3701                 opts = qemu_opts_parse(qemu_find_opts("trace"), optarg, 0);
3702                 if (!opts) {
3703                     exit(1);
3704                 }
3705                 trace_events = qemu_opt_get(opts, "events");
3706                 trace_file = qemu_opt_get(opts, "file");
3707                 break;
3708             }
3709             case QEMU_OPTION_readconfig:
3710                 {
3711                     int ret = qemu_read_config_file(optarg);
3712                     if (ret < 0) {
3713                         fprintf(stderr, "read config %s: %s\n", optarg,
3714                             strerror(-ret));
3715                         exit(1);
3716                     }
3717                     break;
3718                 }
3719             case QEMU_OPTION_spice:
3720                 olist = qemu_find_opts("spice");
3721                 if (!olist) {
3722                     fprintf(stderr, "spice is not supported by this qemu build.\n");
3723                     exit(1);
3724                 }
3725                 opts = qemu_opts_parse(olist, optarg, 0);
3726                 if (!opts) {
3727                     exit(1);
3728                 }
3729                 display_remote++;
3730                 break;
3731             case QEMU_OPTION_writeconfig:
3732                 {
3733                     FILE *fp;
3734                     if (strcmp(optarg, "-") == 0) {
3735                         fp = stdout;
3736                     } else {
3737                         fp = fopen(optarg, "w");
3738                         if (fp == NULL) {
3739                             fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
3740                             exit(1);
3741                         }
3742                     }
3743                     qemu_config_write(fp);
3744                     if (fp != stdout) {
3745                         fclose(fp);
3746                     }
3747                     break;
3748                 }
3749             case QEMU_OPTION_qtest:
3750                 qtest_chrdev = optarg;
3751                 break;
3752             case QEMU_OPTION_qtest_log:
3753                 qtest_log = optarg;
3754                 break;
3755             case QEMU_OPTION_sandbox:
3756                 opts = qemu_opts_parse(qemu_find_opts("sandbox"), optarg, 1);
3757                 if (!opts) {
3758                     exit(1);
3759                 }
3760                 break;
3761             case QEMU_OPTION_add_fd:
3762 #ifndef _WIN32
3763                 opts = qemu_opts_parse(qemu_find_opts("add-fd"), optarg, 0);
3764                 if (!opts) {
3765                     exit(1);
3766                 }
3767 #else
3768                 error_report("File descriptor passing is disabled on this "
3769                              "platform");
3770                 exit(1);
3771 #endif
3772                 break;
3773             case QEMU_OPTION_object:
3774                 opts = qemu_opts_parse(qemu_find_opts("object"), optarg, 1);
3775                 if (!opts) {
3776                     exit(1);
3777                 }
3778                 break;
3779             case QEMU_OPTION_realtime:
3780                 opts = qemu_opts_parse(qemu_find_opts("realtime"), optarg, 0);
3781                 if (!opts) {
3782                     exit(1);
3783                 }
3784                 enable_mlock = qemu_opt_get_bool(opts, "mlock", true);
3785                 break;
3786             case QEMU_OPTION_msg:
3787                 opts = qemu_opts_parse(qemu_find_opts("msg"), optarg, 0);
3788                 if (!opts) {
3789                     exit(1);
3790                 }
3791                 configure_msg(opts);
3792                 break;
3793             case QEMU_OPTION_dump_vmstate:
3794                 if (vmstate_dump_file) {
3795                     fprintf(stderr, "qemu: only one '-dump-vmstate' "
3796                             "option may be given\n");
3797                     exit(1);
3798                 }
3799                 vmstate_dump_file = fopen(optarg, "w");
3800                 if (vmstate_dump_file == NULL) {
3801                     fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
3802                     exit(1);
3803                 }
3804                 break;
3805             default:
3806                 os_parse_cmd_args(popt->index, optarg);
3807             }
3808         }
3809     }
3810     loc_set_none();
3811
3812     os_daemonize();
3813
3814     if (qemu_init_main_loop(&main_loop_err)) {
3815         error_report("%s", error_get_pretty(main_loop_err));
3816         exit(1);
3817     }
3818
3819     if (qemu_opts_foreach(qemu_find_opts("sandbox"), parse_sandbox, NULL, 0)) {
3820         exit(1);
3821     }
3822
3823     if (qemu_opts_foreach(qemu_find_opts("name"), parse_name, NULL, 1)) {
3824         exit(1);
3825     }
3826
3827 #ifndef _WIN32
3828     if (qemu_opts_foreach(qemu_find_opts("add-fd"), parse_add_fd, NULL, 1)) {
3829         exit(1);
3830     }
3831
3832     if (qemu_opts_foreach(qemu_find_opts("add-fd"), cleanup_add_fd, NULL, 1)) {
3833         exit(1);
3834     }
3835 #endif
3836
3837     if (machine_class == NULL) {
3838         fprintf(stderr, "No machine specified, and there is no default.\n"
3839                 "Use -machine help to list supported machines!\n");
3840         exit(1);
3841     }
3842
3843     current_machine = MACHINE(object_new(object_class_get_name(
3844                           OBJECT_CLASS(machine_class))));
3845     object_property_add_child(object_get_root(), "machine",
3846                               OBJECT(current_machine), &error_abort);
3847     cpu_exec_init_all();
3848
3849     if (machine_class->hw_version) {
3850         qemu_set_version(machine_class->hw_version);
3851     }
3852
3853     /* Init CPU def lists, based on config
3854      * - Must be called after all the qemu_read_config_file() calls
3855      * - Must be called before list_cpus()
3856      * - Must be called before machine->init()
3857      */
3858     cpudef_init();
3859
3860     if (cpu_model && is_help_option(cpu_model)) {
3861         list_cpus(stdout, &fprintf, cpu_model);
3862         exit(0);
3863     }
3864
3865     /* Open the logfile at this point, if necessary. We can't open the logfile
3866      * when encountering either of the logging options (-d or -D) because the
3867      * other one may be encountered later on the command line, changing the
3868      * location or level of logging.
3869      */
3870     if (log_mask) {
3871         int mask;
3872         if (log_file) {
3873             qemu_set_log_filename(log_file);
3874         }
3875
3876         mask = qemu_str_to_log_mask(log_mask);
3877         if (!mask) {
3878             qemu_print_log_usage(stdout);
3879             exit(1);
3880         }
3881         qemu_set_log(mask);
3882     }
3883
3884     if (!is_daemonized()) {
3885         if (!trace_init_backends(trace_events, trace_file)) {
3886             exit(1);
3887         }
3888     }
3889
3890     /* If no data_dir is specified then try to find it relative to the
3891        executable path.  */
3892     if (data_dir_idx < ARRAY_SIZE(data_dir)) {
3893         data_dir[data_dir_idx] = os_find_datadir();
3894         if (data_dir[data_dir_idx] != NULL) {
3895             data_dir_idx++;
3896         }
3897     }
3898     /* If all else fails use the install path specified when building. */
3899     if (data_dir_idx < ARRAY_SIZE(data_dir)) {
3900         data_dir[data_dir_idx++] = CONFIG_QEMU_DATADIR;
3901     }
3902
3903     smp_parse(qemu_opts_find(qemu_find_opts("smp-opts"), NULL));
3904
3905     machine_class->max_cpus = machine_class->max_cpus ?: 1; /* Default to UP */
3906     if (smp_cpus > machine_class->max_cpus) {
3907         fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
3908                 "supported by machine `%s' (%d)\n", smp_cpus,
3909                 machine_class->name, machine_class->max_cpus);
3910         exit(1);
3911     }
3912
3913     /*
3914      * Get the default machine options from the machine if it is not already
3915      * specified either by the configuration file or by the command line.
3916      */
3917     if (machine_class->default_machine_opts) {
3918         qemu_opts_set_defaults(qemu_find_opts("machine"),
3919                                machine_class->default_machine_opts, 0);
3920     }
3921
3922     qemu_opts_foreach(qemu_find_opts("device"), default_driver_check, NULL, 0);
3923     qemu_opts_foreach(qemu_find_opts("global"), default_driver_check, NULL, 0);
3924
3925     if (!vga_model && !default_vga) {
3926         vga_interface_type = VGA_DEVICE;
3927     }
3928     if (!has_defaults || machine_class->no_serial) {
3929         default_serial = 0;
3930     }
3931     if (!has_defaults || machine_class->no_parallel) {
3932         default_parallel = 0;
3933     }
3934     if (!has_defaults || !machine_class->use_virtcon) {
3935         default_virtcon = 0;
3936     }
3937     if (!has_defaults || !machine_class->use_sclp) {
3938         default_sclp = 0;
3939     }
3940     if (!has_defaults || machine_class->no_floppy) {
3941         default_floppy = 0;
3942     }
3943     if (!has_defaults || machine_class->no_cdrom) {
3944         default_cdrom = 0;
3945     }
3946     if (!has_defaults || machine_class->no_sdcard) {
3947         default_sdcard = 0;
3948     }
3949     if (!has_defaults) {
3950         default_monitor = 0;
3951         default_net = 0;
3952         default_vga = 0;
3953     }
3954
3955     if (is_daemonized()) {
3956         /* According to documentation and historically, -nographic redirects
3957          * serial port, parallel port and monitor to stdio, which does not work
3958          * with -daemonize.  We can redirect these to null instead, but since
3959          * -nographic is legacy, let's just error out.
3960          * We disallow -nographic only if all other ports are not redirected
3961          * explicitly, to not break existing legacy setups which uses
3962          * -nographic _and_ redirects all ports explicitly - this is valid
3963          * usage, -nographic is just a no-op in this case.
3964          */
3965         if (display_type == DT_NOGRAPHIC
3966             && (default_parallel || default_serial
3967                 || default_monitor || default_virtcon)) {
3968             fprintf(stderr, "-nographic can not be used with -daemonize\n");
3969             exit(1);
3970         }
3971 #ifdef CONFIG_CURSES
3972         if (display_type == DT_CURSES) {
3973             fprintf(stderr, "curses display can not be used with -daemonize\n");
3974             exit(1);
3975         }
3976 #endif
3977     }
3978
3979     if (display_type == DT_NOGRAPHIC) {
3980         if (default_parallel)
3981             add_device_config(DEV_PARALLEL, "null");
3982         if (default_serial && default_monitor) {
3983             add_device_config(DEV_SERIAL, "mon:stdio");
3984         } else if (default_virtcon && default_monitor) {
3985             add_device_config(DEV_VIRTCON, "mon:stdio");
3986         } else if (default_sclp && default_monitor) {
3987             add_device_config(DEV_SCLP, "mon:stdio");
3988         } else {
3989             if (default_serial)
3990                 add_device_config(DEV_SERIAL, "stdio");
3991             if (default_virtcon)
3992                 add_device_config(DEV_VIRTCON, "stdio");
3993             if (default_sclp) {
3994                 add_device_config(DEV_SCLP, "stdio");
3995             }
3996             if (default_monitor)
3997                 monitor_parse("stdio", "readline");
3998         }
3999     } else {
4000         if (default_serial)
4001             add_device_config(DEV_SERIAL, "vc:80Cx24C");
4002         if (default_parallel)
4003             add_device_config(DEV_PARALLEL, "vc:80Cx24C");
4004         if (default_monitor)
4005             monitor_parse("vc:80Cx24C", "readline");
4006         if (default_virtcon)
4007             add_device_config(DEV_VIRTCON, "vc:80Cx24C");
4008         if (default_sclp) {
4009             add_device_config(DEV_SCLP, "vc:80Cx24C");
4010         }
4011     }
4012
4013     if (display_type == DT_DEFAULT && !display_remote) {
4014 #if defined(CONFIG_GTK)
4015         display_type = DT_GTK;
4016 #elif defined(CONFIG_SDL) || defined(CONFIG_COCOA)
4017         display_type = DT_SDL;
4018 #elif defined(CONFIG_VNC)
4019         vnc_display = "localhost:0,to=99";
4020         show_vnc_port = 1;
4021 #else
4022         display_type = DT_NONE;
4023 #endif
4024     }
4025
4026     if ((no_frame || alt_grab || ctrl_grab) && display_type != DT_SDL) {
4027         fprintf(stderr, "-no-frame, -alt-grab and -ctrl-grab are only valid "
4028                         "for SDL, ignoring option\n");
4029     }
4030     if (no_quit && (display_type != DT_GTK && display_type != DT_SDL)) {
4031         fprintf(stderr, "-no-quit is only valid for GTK and SDL, "
4032                         "ignoring option\n");
4033     }
4034
4035 #if defined(CONFIG_GTK)
4036     if (display_type == DT_GTK) {
4037         early_gtk_display_init();
4038     }
4039 #endif
4040
4041     socket_init();
4042
4043     if (qemu_opts_foreach(qemu_find_opts("chardev"), chardev_init_func, NULL, 1) != 0)
4044         exit(1);
4045 #ifdef CONFIG_VIRTFS
4046     if (qemu_opts_foreach(qemu_find_opts("fsdev"), fsdev_init_func, NULL, 1) != 0) {
4047         exit(1);
4048     }
4049 #endif
4050
4051     if (pid_file && qemu_create_pidfile(pid_file) != 0) {
4052         fprintf(stderr, "Could not acquire pid file: %s\n", strerror(errno));
4053         exit(1);
4054     }
4055
4056     /* store value for the future use */
4057     qemu_opt_set_number(qemu_find_opts_singleton("memory"), "size", ram_size);
4058
4059     if (qemu_opts_foreach(qemu_find_opts("device"), device_help_func, NULL, 0)
4060         != 0) {
4061         exit(0);
4062     }
4063
4064     if (qemu_opts_foreach(qemu_find_opts("object"),
4065                           object_create, NULL, 0) != 0) {
4066         exit(1);
4067     }
4068
4069     machine_opts = qemu_get_machine_opts();
4070     if (qemu_opt_foreach(machine_opts, machine_set_property, current_machine,
4071                          1) < 0) {
4072         object_unref(OBJECT(current_machine));
4073         exit(1);
4074     }
4075
4076     configure_accelerator(current_machine);
4077
4078     if (qtest_chrdev) {
4079         Error *local_err = NULL;
4080         qtest_init(qtest_chrdev, qtest_log, &local_err);
4081         if (local_err) {
4082             error_report("%s", error_get_pretty(local_err));
4083             error_free(local_err);
4084             exit(1);
4085         }
4086     }
4087
4088     machine_opts = qemu_get_machine_opts();
4089     kernel_filename = qemu_opt_get(machine_opts, "kernel");
4090     initrd_filename = qemu_opt_get(machine_opts, "initrd");
4091     kernel_cmdline = qemu_opt_get(machine_opts, "append");
4092     bios_name = qemu_opt_get(machine_opts, "firmware");
4093
4094     boot_order = machine_class->default_boot_order;
4095     opts = qemu_opts_find(qemu_find_opts("boot-opts"), NULL);
4096     if (opts) {
4097         char *normal_boot_order;
4098         const char *order, *once;
4099
4100         order = qemu_opt_get(opts, "order");
4101         if (order) {
4102             validate_bootdevices(order);
4103             boot_order = order;
4104         }
4105
4106         once = qemu_opt_get(opts, "once");
4107         if (once) {
4108             validate_bootdevices(once);
4109             normal_boot_order = g_strdup(boot_order);
4110             boot_order = once;
4111             qemu_register_reset(restore_boot_order, normal_boot_order);
4112         }
4113
4114         boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu);
4115         boot_strict = qemu_opt_get_bool(opts, "strict", false);
4116     }
4117
4118     if (!kernel_cmdline) {
4119         kernel_cmdline = "";
4120         current_machine->kernel_cmdline = (char *)kernel_cmdline;
4121     }
4122
4123     linux_boot = (kernel_filename != NULL);
4124
4125     if (!linux_boot && *kernel_cmdline != '\0') {
4126         fprintf(stderr, "-append only allowed with -kernel option\n");
4127         exit(1);
4128     }
4129
4130     if (!linux_boot && initrd_filename != NULL) {
4131         fprintf(stderr, "-initrd only allowed with -kernel option\n");
4132         exit(1);
4133     }
4134
4135     if (!linux_boot && qemu_opt_get(machine_opts, "dtb")) {
4136         fprintf(stderr, "-dtb only allowed with -kernel option\n");
4137         exit(1);
4138     }
4139
4140     os_set_line_buffering();
4141
4142     qemu_init_cpu_loop();
4143     qemu_mutex_lock_iothread();
4144
4145 #ifdef CONFIG_SPICE
4146     /* spice needs the timers to be initialized by this point */
4147     qemu_spice_init();
4148 #endif
4149
4150     cpu_ticks_init();
4151     if (icount_opts) {
4152         if (kvm_enabled() || xen_enabled()) {
4153             fprintf(stderr, "-icount is not allowed with kvm or xen\n");
4154             exit(1);
4155         }
4156         configure_icount(icount_opts, &error_abort);
4157         qemu_opts_del(icount_opts);
4158     }
4159
4160     /* clean up network at qemu process termination */
4161     atexit(&net_cleanup);
4162
4163     if (net_init_clients() < 0) {
4164         exit(1);
4165     }
4166
4167 #ifdef CONFIG_TPM
4168     if (tpm_init() < 0) {
4169         exit(1);
4170     }
4171 #endif
4172
4173     /* init the bluetooth world */
4174     if (foreach_device_config(DEV_BT, bt_parse))
4175         exit(1);
4176
4177     if (!xen_enabled()) {
4178         /* On 32-bit hosts, QEMU is limited by virtual address space */
4179         if (ram_size > (2047 << 20) && HOST_LONG_BITS == 32) {
4180             fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
4181             exit(1);
4182         }
4183     }
4184
4185     blk_mig_init();
4186     ram_mig_init();
4187
4188     /* If the currently selected machine wishes to override the units-per-bus
4189      * property of its default HBA interface type, do so now. */
4190     if (machine_class->units_per_default_bus) {
4191         override_max_devs(machine_class->block_default_type,
4192                           machine_class->units_per_default_bus);
4193     }
4194
4195     /* open the virtual block devices */
4196     if (snapshot)
4197         qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot, NULL, 0);
4198     if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
4199                           &machine_class->block_default_type, 1) != 0) {
4200         exit(1);
4201     }
4202
4203     default_drive(default_cdrom, snapshot, machine_class->block_default_type, 2,
4204                   CDROM_OPTS);
4205     default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS);
4206     default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS);
4207
4208     if (qemu_opts_foreach(qemu_find_opts("numa"), numa_init_func,
4209                           NULL, 1) != 0) {
4210         exit(1);
4211     }
4212
4213     set_numa_nodes();
4214
4215     if (qemu_opts_foreach(qemu_find_opts("mon"), mon_init_func, NULL, 1) != 0) {
4216         exit(1);
4217     }
4218
4219     if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
4220         exit(1);
4221     if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
4222         exit(1);
4223     if (foreach_device_config(DEV_VIRTCON, virtcon_parse) < 0)
4224         exit(1);
4225     if (foreach_device_config(DEV_SCLP, sclp_parse) < 0) {
4226         exit(1);
4227     }
4228     if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
4229         exit(1);
4230
4231     /* If no default VGA is requested, the default is "none".  */
4232     if (default_vga) {
4233         if (machine_class->default_display) {
4234             vga_model = machine_class->default_display;
4235         } else if (cirrus_vga_available()) {
4236             vga_model = "cirrus";
4237         } else if (vga_available()) {
4238             vga_model = "std";
4239         }
4240     }
4241     if (vga_model) {
4242         select_vgahw(vga_model);
4243     }
4244
4245     if (watchdog) {
4246         i = select_watchdog(watchdog);
4247         if (i > 0)
4248             exit (i == 1 ? 1 : 0);
4249     }
4250
4251     if (machine_class->compat_props) {
4252         qdev_prop_register_global_list(machine_class->compat_props);
4253     }
4254     qemu_add_globals();
4255
4256     qdev_machine_init();
4257
4258     current_machine->ram_size = ram_size;
4259     current_machine->maxram_size = maxram_size;
4260     current_machine->ram_slots = ram_slots;
4261     current_machine->boot_order = boot_order;
4262     current_machine->cpu_model = cpu_model;
4263
4264     machine_class->init(current_machine);
4265
4266     realtime_init();
4267
4268     audio_init();
4269
4270     cpu_synchronize_all_post_init();
4271
4272     set_numa_modes();
4273
4274     /* init USB devices */
4275     if (usb_enabled(false)) {
4276         if (foreach_device_config(DEV_USB, usb_parse) < 0)
4277             exit(1);
4278     }
4279
4280     /* init generic devices */
4281     if (qemu_opts_foreach(qemu_find_opts("device"), device_init_func, NULL, 1) != 0)
4282         exit(1);
4283
4284     /* Did we create any drives that we failed to create a device for? */
4285     drive_check_orphaned();
4286
4287     net_check_clients();
4288
4289     ds = init_displaystate();
4290
4291     /* init local displays */
4292     switch (display_type) {
4293     case DT_NOGRAPHIC:
4294         (void)ds;       /* avoid warning if no display is configured */
4295         break;
4296 #if defined(CONFIG_CURSES)
4297     case DT_CURSES:
4298         curses_display_init(ds, full_screen);
4299         break;
4300 #endif
4301 #if defined(CONFIG_SDL)
4302     case DT_SDL:
4303         sdl_display_init(ds, full_screen, no_frame);
4304         break;
4305 #elif defined(CONFIG_COCOA)
4306     case DT_SDL:
4307         cocoa_display_init(ds, full_screen);
4308         break;
4309 #endif
4310 #if defined(CONFIG_GTK)
4311     case DT_GTK:
4312         gtk_display_init(ds, full_screen, grab_on_hover);
4313         break;
4314 #endif
4315     default:
4316         break;
4317     }
4318
4319     /* must be after terminal init, SDL library changes signal handlers */
4320     os_setup_signal_handling();
4321
4322 #ifdef CONFIG_VNC
4323     /* init remote displays */
4324     if (vnc_display) {
4325         Error *local_err = NULL;
4326         vnc_display_init(ds);
4327         vnc_display_open(ds, vnc_display, &local_err);
4328         if (local_err != NULL) {
4329             error_report("Failed to start VNC server on `%s': %s",
4330                          vnc_display, error_get_pretty(local_err));
4331             error_free(local_err);
4332             exit(1);
4333         }
4334
4335         if (show_vnc_port) {
4336             printf("VNC server running on `%s'\n", vnc_display_local_addr(ds));
4337         }
4338     }
4339 #endif
4340 #ifdef CONFIG_SPICE
4341     if (using_spice) {
4342         qemu_spice_display_init();
4343     }
4344 #endif
4345
4346     if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
4347         exit(1);
4348     }
4349
4350     qdev_machine_creation_done();
4351
4352     if (rom_load_all() != 0) {
4353         fprintf(stderr, "rom loading failed\n");
4354         exit(1);
4355     }
4356
4357     /* TODO: once all bus devices are qdevified, this should be done
4358      * when bus is created by qdev.c */
4359     qemu_register_reset(qbus_reset_all_fn, sysbus_get_default());
4360     qemu_run_machine_init_done_notifiers();
4361
4362     /* Done notifiers can load ROMs */
4363     rom_load_done();
4364
4365     qemu_system_reset(VMRESET_SILENT);
4366     if (loadvm) {
4367         if (load_vmstate(loadvm) < 0) {
4368             autostart = 0;
4369         }
4370     }
4371
4372     qdev_prop_check_globals();
4373     if (vmstate_dump_file) {
4374         /* dump and exit */
4375         dump_vmstate_json_to_file(vmstate_dump_file);
4376         return 0;
4377     }
4378
4379     if (incoming) {
4380         Error *local_err = NULL;
4381         qemu_start_incoming_migration(incoming, &local_err);
4382         if (local_err) {
4383             error_report("-incoming %s: %s", incoming,
4384                          error_get_pretty(local_err));
4385             error_free(local_err);
4386             exit(1);
4387         }
4388     } else if (autostart) {
4389         vm_start();
4390     }
4391
4392     os_setup_post();
4393
4394     if (is_daemonized()) {
4395         if (!trace_init_backends(trace_events, trace_file)) {
4396             exit(1);
4397         }
4398     }
4399
4400     main_loop();
4401     bdrv_close_all();
4402     pause_all_vcpus();
4403     res_free();
4404 #ifdef CONFIG_TPM
4405     tpm_cleanup();
4406 #endif
4407
4408     return 0;
4409 }
This page took 0.271643 seconds and 4 git commands to generate.