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