1/* 2 * QEMU System Emulator 3 * 4 * Copyright (c) 2003-2008 Fabrice Bellard 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 * THE SOFTWARE. 23 */ 24#include <unistd.h> 25#include <fcntl.h> 26#include <signal.h> 27#include <time.h> 28#include <errno.h> 29#include <sys/time.h> 30#include <zlib.h> 31 32/* Needed early for CONFIG_BSD etc. */ 33#include "config-host.h" 34 35#ifndef _WIN32 36#include <libgen.h> 37#include <sys/times.h> 38#include <sys/wait.h> 39#include <termios.h> 40#include <sys/mman.h> 41#include <sys/ioctl.h> 42#include <sys/resource.h> 43#include <sys/socket.h> 44#include <netinet/in.h> 45#include <net/if.h> 46#if defined(__NetBSD__) 47#include <net/if_tap.h> 48#endif 49#ifdef __linux__ 50#include <linux/if_tun.h> 51#endif 52#include <arpa/inet.h> 53#include <dirent.h> 54#include <netdb.h> 55#include <sys/select.h> 56#ifdef CONFIG_BSD 57#include <sys/stat.h> 58#if defined(__FreeBSD__) || defined(__DragonFly__) 59#include <libutil.h> 60#else 61#include <util.h> 62#endif 63#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__) 64#include <freebsd/stdlib.h> 65#else 66#ifdef __linux__ 67#include <pty.h> 68#include <malloc.h> 69#include <linux/rtc.h> 70 71/* For the benefit of older linux systems which don't supply it, 72 we use a local copy of hpet.h. */ 73/* #include <linux/hpet.h> */ 74#include "hpet.h" 75 76#include <linux/ppdev.h> 77#include <linux/parport.h> 78#endif 79#ifdef __sun__ 80#include <sys/stat.h> 81#include <sys/ethernet.h> 82#include <sys/sockio.h> 83#include <netinet/arp.h> 84#include <netinet/in.h> 85#include <netinet/in_systm.h> 86#include <netinet/ip.h> 87#include <netinet/ip_icmp.h> // must come after ip.h 88#include <netinet/udp.h> 89#include <netinet/tcp.h> 90#include <net/if.h> 91#include <syslog.h> 92#include <stropts.h> 93#endif 94#endif 95#endif 96 97#if defined(__OpenBSD__) 98#include <util.h> 99#endif 100 101#if defined(CONFIG_VDE) 102#include <libvdeplug.h> 103#endif 104 105#ifdef _WIN32 106#include <windows.h> 107#include <malloc.h> 108#include <sys/timeb.h> 109#include <mmsystem.h> 110#define getopt_long_only getopt_long 111#define memalign(align, size) malloc(size) 112#endif 113 114#include "cpus.h" 115#include "arch_init.h" 116 117#ifdef CONFIG_SDL 118#ifdef __APPLE__ 119#include <SDL.h> 120int qemu_main(int argc, char **argv, char **envp); 121int main(int argc, char **argv) 122{ 123 qemu_main(argc, argv, NULL); 124} 125#undef main 126#define main qemu_main 127#endif 128#endif /* CONFIG_SDL */ 129 130#ifdef CONFIG_COCOA 131int qemu_main(int argc, char **argv, char **envp); 132#undef main 133#define main qemu_main 134#endif /* CONFIG_COCOA */ 135 136#include "hw/hw.h" 137#include "hw/boards.h" 138#include "hw/usb.h" 139#include "hw/pcmcia.h" 140#include "hw/pc.h" 141#include "hw/isa.h" 142#include "hw/baum.h" 143#include "hw/bt.h" 144#include "hw/watchdog.h" 145#include "hw/smbios.h" 146#include "hw/xen.h" 147#include "bt-host.h" 148#include "net.h" 149#include "monitor.h" 150#include "console.h" 151#include "sysemu.h" 152#include "gdbstub.h" 153#include "qemu-timer.h" 154#include "qemu-char.h" 155#include "cache-utils.h" 156#include "block.h" 157#include "dma.h" 158#include "audio/audio.h" 159#include "migration.h" 160#include "kvm.h" 161#include "balloon.h" 162#include "qemu-option.h" 163 164#include "disas.h" 165 166#include "exec-all.h" 167 168#include "qemu_socket.h" 169 170#if defined(CONFIG_SLIRP) 171#include "libslirp.h" 172#endif 173 174 175 176#define DEFAULT_RAM_SIZE 128 177 178/* Max number of USB devices that can be specified on the commandline. */ 179#define MAX_USB_CMDLINE 8 180 181/* Max number of bluetooth switches on the commandline. */ 182#define MAX_BT_CMDLINE 10 183 184/* XXX: use a two level table to limit memory usage */ 185#define MAX_IOPORTS 65536 186 187static const char *data_dir; 188const char *bios_name = NULL; 189static void *ioport_opaque[MAX_IOPORTS]; 190static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS]; 191static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS]; 192/* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available 193 to store the VM snapshots */ 194DriveInfo drives_table[MAX_DRIVES+1]; 195int nb_drives; 196enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB; 197DisplayType display_type = DT_DEFAULT; 198const char* keyboard_layout = NULL; 199ram_addr_t ram_size; 200const char *mem_path = NULL; 201#ifdef MAP_POPULATE 202int mem_prealloc = 0; /* force preallocation of physical target memory */ 203#endif 204int nb_nics; 205NICInfo nd_table[MAX_NICS]; 206int vm_running; 207static int autostart; 208static int rtc_utc = 1; 209static int rtc_date_offset = -1; /* -1 means no change */ 210int cirrus_vga_enabled = 1; 211int std_vga_enabled = 0; 212int vmsvga_enabled = 0; 213int xenfb_enabled = 0; 214QEMUClock *rtc_clock; 215static int full_screen = 0; 216#ifdef CONFIG_SDL 217static int no_frame = 0; 218#endif 219int no_quit = 0; 220CharDriverState *serial_hds[MAX_SERIAL_PORTS]; 221CharDriverState *parallel_hds[MAX_PARALLEL_PORTS]; 222CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES]; 223#ifdef TARGET_I386 224int win2k_install_hack = 0; 225int rtc_td_hack = 0; 226#endif 227int usb_enabled = 0; 228int singlestep = 0; 229int smp_cpus = 1; 230const char *vnc_display; 231int acpi_enabled = 1; 232int no_hpet = 0; 233int no_virtio_balloon = 0; 234int fd_bootchk = 1; 235int no_reboot = 0; 236int no_shutdown = 0; 237int cursor_hide = 1; 238int graphic_rotate = 0; 239WatchdogTimerModel *watchdog = NULL; 240int watchdog_action = WDT_RESET; 241const char *option_rom[MAX_OPTION_ROMS]; 242int nb_option_roms; 243int semihosting_enabled = 0; 244#ifdef TARGET_ARM 245int old_param = 0; 246#endif 247const char *qemu_name; 248int alt_grab = 0; 249#if defined(TARGET_SPARC) || defined(TARGET_PPC) 250unsigned int nb_prom_envs = 0; 251const char *prom_envs[MAX_PROM_ENVS]; 252#endif 253int nb_drives_opt; 254struct drive_opt drives_opt[MAX_DRIVES]; 255 256int nb_numa_nodes; 257uint64_t node_mem[MAX_NODES]; 258uint64_t node_cpumask[MAX_NODES]; 259 260static QEMUTimer *nographic_timer; 261 262uint8_t qemu_uuid[16]; 263 264/***********************************************************/ 265/* x86 ISA bus support */ 266 267target_phys_addr_t isa_mem_base = 0; 268PicState2 *isa_pic; 269 270static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl; 271static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel; 272 273static uint32_t ioport_read(int index, uint32_t address) 274{ 275 static IOPortReadFunc *default_func[3] = { 276 default_ioport_readb, 277 default_ioport_readw, 278 default_ioport_readl 279 }; 280 IOPortReadFunc *func = ioport_read_table[index][address]; 281 if (!func) 282 func = default_func[index]; 283 return func(ioport_opaque[address], address); 284} 285 286static void ioport_write(int index, uint32_t address, uint32_t data) 287{ 288 static IOPortWriteFunc *default_func[3] = { 289 default_ioport_writeb, 290 default_ioport_writew, 291 default_ioport_writel 292 }; 293 IOPortWriteFunc *func = ioport_write_table[index][address]; 294 if (!func) 295 func = default_func[index]; 296 func(ioport_opaque[address], address, data); 297} 298 299static uint32_t default_ioport_readb(void *opaque, uint32_t address) 300{ 301#ifdef DEBUG_UNUSED_IOPORT 302 fprintf(stderr, "unused inb: port=0x%04x\n", address); 303#endif 304 return 0xff; 305} 306 307static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data) 308{ 309#ifdef DEBUG_UNUSED_IOPORT 310 fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data); 311#endif 312} 313 314/* default is to make two byte accesses */ 315static uint32_t default_ioport_readw(void *opaque, uint32_t address) 316{ 317 uint32_t data; 318 data = ioport_read(0, address); 319 address = (address + 1) & (MAX_IOPORTS - 1); 320 data |= ioport_read(0, address) << 8; 321 return data; 322} 323 324static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data) 325{ 326 ioport_write(0, address, data & 0xff); 327 address = (address + 1) & (MAX_IOPORTS - 1); 328 ioport_write(0, address, (data >> 8) & 0xff); 329} 330 331static uint32_t default_ioport_readl(void *opaque, uint32_t address) 332{ 333#ifdef DEBUG_UNUSED_IOPORT 334 fprintf(stderr, "unused inl: port=0x%04x\n", address); 335#endif 336 return 0xffffffff; 337} 338 339static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data) 340{ 341#ifdef DEBUG_UNUSED_IOPORT 342 fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data); 343#endif 344} 345 346 347/***************/ 348/* ballooning */ 349 350static QEMUBalloonEvent *qemu_balloon_event; 351void *qemu_balloon_event_opaque; 352 353void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque) 354{ 355 qemu_balloon_event = func; 356 qemu_balloon_event_opaque = opaque; 357} 358 359void qemu_balloon(ram_addr_t target) 360{ 361 if (qemu_balloon_event) 362 qemu_balloon_event(qemu_balloon_event_opaque, target); 363} 364 365ram_addr_t qemu_balloon_status(void) 366{ 367 if (qemu_balloon_event) 368 return qemu_balloon_event(qemu_balloon_event_opaque, 0); 369 return 0; 370} 371 372/***********************************************************/ 373/* host time/date access */ 374void qemu_get_timedate(struct tm *tm, int offset) 375{ 376 time_t ti; 377 struct tm *ret; 378 379 time(&ti); 380 ti += offset; 381 if (rtc_date_offset == -1) { 382 if (rtc_utc) 383 ret = gmtime(&ti); 384 else 385 ret = localtime(&ti); 386 } else { 387 ti -= rtc_date_offset; 388 ret = gmtime(&ti); 389 } 390 391 memcpy(tm, ret, sizeof(struct tm)); 392} 393 394int qemu_timedate_diff(struct tm *tm) 395{ 396 time_t seconds; 397 398 if (rtc_date_offset == -1) 399 if (rtc_utc) 400 seconds = mktimegm(tm); 401 else 402 seconds = mktime(tm); 403 else 404 seconds = mktimegm(tm) + rtc_date_offset; 405 406 return seconds - time(NULL); 407} 408 409#ifdef _WIN32 410static void socket_cleanup(void) 411{ 412 WSACleanup(); 413} 414 415static int socket_init(void) 416{ 417 WSADATA Data; 418 int ret, err; 419 420 ret = WSAStartup(MAKEWORD(2,2), &Data); 421 if (ret != 0) { 422 err = WSAGetLastError(); 423 fprintf(stderr, "WSAStartup: %d\n", err); 424 return -1; 425 } 426 atexit(socket_cleanup); 427 return 0; 428} 429#endif 430 431int get_param_value(char *buf, int buf_size, 432 const char *tag, const char *str) 433{ 434 const char *p; 435 char option[128]; 436 437 p = str; 438 for(;;) { 439 p = get_opt_name(option, sizeof(option), p, '='); 440 if (*p != '=') 441 break; 442 p++; 443 if (!strcmp(tag, option)) { 444 (void)get_opt_value(buf, buf_size, p); 445 return strlen(buf); 446 } else { 447 p = get_opt_value(NULL, 0, p); 448 } 449 if (*p != ',') 450 break; 451 p++; 452 } 453 return 0; 454} 455 456int check_params(char *buf, int buf_size, 457 const char * const *params, const char *str) 458{ 459 const char *p; 460 int i; 461 462 p = str; 463 while (*p != '\0') { 464 p = get_opt_name(buf, buf_size, p, '='); 465 if (*p != '=') { 466 return -1; 467 } 468 p++; 469 for (i = 0; params[i] != NULL; i++) { 470 if (!strcmp(params[i], buf)) { 471 break; 472 } 473 } 474 if (params[i] == NULL) { 475 return -1; 476 } 477 p = get_opt_value(NULL, 0, p); 478 if (*p != ',') { 479 break; 480 } 481 p++; 482 } 483 return 0; 484} 485 486/***********************************************************/ 487/* Bluetooth support */ 488static int nb_hcis; 489static int cur_hci; 490static struct HCIInfo *hci_table[MAX_NICS]; 491 492static struct bt_vlan_s { 493 struct bt_scatternet_s net; 494 int id; 495 struct bt_vlan_s *next; 496} *first_bt_vlan; 497 498/* find or alloc a new bluetooth "VLAN" */ 499static struct bt_scatternet_s *qemu_find_bt_vlan(int id) 500{ 501 struct bt_vlan_s **pvlan, *vlan; 502 for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) { 503 if (vlan->id == id) 504 return &vlan->net; 505 } 506 vlan = qemu_mallocz(sizeof(struct bt_vlan_s)); 507 vlan->id = id; 508 pvlan = &first_bt_vlan; 509 while (*pvlan != NULL) 510 pvlan = &(*pvlan)->next; 511 *pvlan = vlan; 512 return &vlan->net; 513} 514 515static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len) 516{ 517} 518 519static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr) 520{ 521 return -ENOTSUP; 522} 523 524static struct HCIInfo null_hci = { 525 .cmd_send = null_hci_send, 526 .sco_send = null_hci_send, 527 .acl_send = null_hci_send, 528 .bdaddr_set = null_hci_addr_set, 529}; 530 531struct HCIInfo *qemu_next_hci(void) 532{ 533 if (cur_hci == nb_hcis) 534 return &null_hci; 535 536 return hci_table[cur_hci++]; 537} 538 539static struct HCIInfo *hci_init(const char *str) 540{ 541 char *endp; 542 struct bt_scatternet_s *vlan = 0; 543 544 if (!strcmp(str, "null")) 545 /* null */ 546 return &null_hci; 547 else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':')) 548 /* host[:hciN] */ 549 return bt_host_hci(str[4] ? str + 5 : "hci0"); 550 else if (!strncmp(str, "hci", 3)) { 551 /* hci[,vlan=n] */ 552 if (str[3]) { 553 if (!strncmp(str + 3, ",vlan=", 6)) { 554 vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0)); 555 if (*endp) 556 vlan = 0; 557 } 558 } else 559 vlan = qemu_find_bt_vlan(0); 560 if (vlan) 561 return bt_new_hci(vlan); 562 } 563 564 fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str); 565 566 return 0; 567} 568 569static int bt_hci_parse(const char *str) 570{ 571 struct HCIInfo *hci; 572 bdaddr_t bdaddr; 573 574 if (nb_hcis >= MAX_NICS) { 575 fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS); 576 return -1; 577 } 578 579 hci = hci_init(str); 580 if (!hci) 581 return -1; 582 583 bdaddr.b[0] = 0x52; 584 bdaddr.b[1] = 0x54; 585 bdaddr.b[2] = 0x00; 586 bdaddr.b[3] = 0x12; 587 bdaddr.b[4] = 0x34; 588 bdaddr.b[5] = 0x56 + nb_hcis; 589 hci->bdaddr_set(hci, bdaddr.b); 590 591 hci_table[nb_hcis++] = hci; 592 593 return 0; 594} 595 596static void bt_vhci_add(int vlan_id) 597{ 598 struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id); 599 600 if (!vlan->slave) 601 fprintf(stderr, "qemu: warning: adding a VHCI to " 602 "an empty scatternet %i\n", vlan_id); 603 604 bt_vhci_init(bt_new_hci(vlan)); 605} 606 607static struct bt_device_s *bt_device_add(const char *opt) 608{ 609 struct bt_scatternet_s *vlan; 610 int vlan_id = 0; 611 char *endp = strstr(opt, ",vlan="); 612 int len = (endp ? endp - opt : strlen(opt)) + 1; 613 char devname[10]; 614 615 pstrcpy(devname, MIN(sizeof(devname), len), opt); 616 617 if (endp) { 618 vlan_id = strtol(endp + 6, &endp, 0); 619 if (*endp) { 620 fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n"); 621 return 0; 622 } 623 } 624 625 vlan = qemu_find_bt_vlan(vlan_id); 626 627 if (!vlan->slave) 628 fprintf(stderr, "qemu: warning: adding a slave device to " 629 "an empty scatternet %i\n", vlan_id); 630 631 if (!strcmp(devname, "keyboard")) 632 return bt_keyboard_init(vlan); 633 634 fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname); 635 return 0; 636} 637 638static int bt_parse(const char *opt) 639{ 640 const char *endp, *p; 641 int vlan; 642 643 if (strstart(opt, "hci", &endp)) { 644 if (!*endp || *endp == ',') { 645 if (*endp) 646 if (!strstart(endp, ",vlan=", 0)) 647 opt = endp + 1; 648 649 return bt_hci_parse(opt); 650 } 651 } else if (strstart(opt, "vhci", &endp)) { 652 if (!*endp || *endp == ',') { 653 if (*endp) { 654 if (strstart(endp, ",vlan=", &p)) { 655 vlan = strtol(p, (char **) &endp, 0); 656 if (*endp) { 657 fprintf(stderr, "qemu: bad scatternet '%s'\n", p); 658 return 1; 659 } 660 } else { 661 fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1); 662 return 1; 663 } 664 } else 665 vlan = 0; 666 667 bt_vhci_add(vlan); 668 return 0; 669 } 670 } else if (strstart(opt, "device:", &endp)) 671 return !bt_device_add(endp); 672 673 fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt); 674 return 1; 675} 676 677/***********************************************************/ 678/* QEMU Block devices */ 679 680#define HD_ALIAS "index=%d,media=disk" 681#define CDROM_ALIAS "index=2,media=cdrom" 682#define FD_ALIAS "index=%d,if=floppy" 683#define PFLASH_ALIAS "if=pflash" 684#define MTD_ALIAS "if=mtd" 685#define SD_ALIAS "index=0,if=sd" 686 687static int drive_init_func(QemuOpts *opts, void *opaque) 688{ 689 int *use_scsi = opaque; 690 int fatal_error = 0; 691 692 if (drive_init(opts, *use_scsi, &fatal_error) == NULL) { 693 if (fatal_error) 694 return 1; 695 } 696 return 0; 697} 698 699static int drive_enable_snapshot(QemuOpts *opts, void *opaque) 700{ 701 if (NULL == qemu_opt_get(opts, "snapshot")) { 702 qemu_opt_set(opts, "snapshot", "on"); 703 } 704 return 0; 705} 706 707static int drive_opt_get_free_idx(void) 708{ 709 int index; 710 711 for (index = 0; index < MAX_DRIVES; index++) 712 if (!drives_opt[index].used) { 713 drives_opt[index].used = 1; 714 return index; 715 } 716 717 return -1; 718} 719 720static int drive_get_free_idx(void) 721{ 722 int index; 723 724 for (index = 0; index < MAX_DRIVES; index++) 725 if (!drives_table[index].used) { 726 drives_table[index].used = 1; 727 return index; 728 } 729 730 return -1; 731} 732 733int drive_add(const char *file, const char *fmt, ...) 734{ 735 va_list ap; 736 int index = drive_opt_get_free_idx(); 737 738 if (nb_drives_opt >= MAX_DRIVES || index == -1) { 739 fprintf(stderr, "qemu: too many drives\n"); 740 return -1; 741 } 742 743 drives_opt[index].file = file; 744 va_start(ap, fmt); 745 vsnprintf(drives_opt[index].opt, 746 sizeof(drives_opt[0].opt), fmt, ap); 747 va_end(ap); 748 749 nb_drives_opt++; 750 return index; 751} 752 753void drive_remove(int index) 754{ 755 drives_opt[index].used = 0; 756 nb_drives_opt--; 757} 758 759int drive_get_index(BlockInterfaceType type, int bus, int unit) 760{ 761 int index; 762 763 /* seek interface, bus and unit */ 764 765 for (index = 0; index < MAX_DRIVES; index++) 766 if (drives_table[index].type == type && 767 drives_table[index].bus == bus && 768 drives_table[index].unit == unit && 769 drives_table[index].used) 770 return index; 771 772 return -1; 773} 774 775int drive_get_max_bus(BlockInterfaceType type) 776{ 777 int max_bus; 778 int index; 779 780 max_bus = -1; 781 for (index = 0; index < nb_drives; index++) { 782 if(drives_table[index].type == type && 783 drives_table[index].bus > max_bus) 784 max_bus = drives_table[index].bus; 785 } 786 return max_bus; 787} 788 789const char *drive_get_serial(BlockDriverState *bdrv) 790{ 791 int index; 792 793 for (index = 0; index < nb_drives; index++) 794 if (drives_table[index].bdrv == bdrv) 795 return drives_table[index].serial; 796 797 return "\0"; 798} 799 800BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv) 801{ 802 int index; 803 804 for (index = 0; index < nb_drives; index++) 805 if (drives_table[index].bdrv == bdrv) 806 return drives_table[index].onerror; 807 808 return BLOCK_ERR_STOP_ENOSPC; 809} 810 811static void bdrv_format_print(void *opaque, const char *name) 812{ 813 fprintf(stderr, " %s", name); 814} 815 816void drive_uninit(BlockDriverState *bdrv) 817{ 818 int i; 819 820 for (i = 0; i < MAX_DRIVES; i++) 821 if (drives_table[i].bdrv == bdrv) { 822 drives_table[i].bdrv = NULL; 823 drives_table[i].used = 0; 824 drive_remove(drives_table[i].drive_opt_idx); 825 nb_drives--; 826 break; 827 } 828} 829 830int drive_init(struct drive_opt *arg, int snapshot, void *opaque) 831{ 832 char buf[128]; 833 char file[1024]; 834 char devname[128]; 835 char serial[21]; 836 const char *mediastr = ""; 837 BlockInterfaceType type; 838 enum { MEDIA_DISK, MEDIA_CDROM } media; 839 int bus_id, unit_id; 840 int cyls, heads, secs, translation; 841 BlockDriverState *bdrv; 842 BlockDriver *drv = NULL; 843 QEMUMachine *machine = opaque; 844 int max_devs; 845 int index; 846 int cache; 847 int bdrv_flags, onerror; 848 int drives_table_idx; 849 char *str = arg->opt; 850 static const char * const params[] = { "bus", "unit", "if", "index", 851 "cyls", "heads", "secs", "trans", 852 "media", "snapshot", "file", 853 "cache", "format", "serial", "werror", 854 NULL }; 855 856 if (check_params(buf, sizeof(buf), params, str) < 0) { 857 fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n", 858 buf, str); 859 return -1; 860 } 861 862 file[0] = 0; 863 cyls = heads = secs = 0; 864 bus_id = 0; 865 unit_id = -1; 866 translation = BIOS_ATA_TRANSLATION_AUTO; 867 index = -1; 868 cache = 3; 869 870 if (machine->use_scsi) { 871 type = IF_SCSI; 872 max_devs = MAX_SCSI_DEVS; 873 pstrcpy(devname, sizeof(devname), "scsi"); 874 } else { 875 type = IF_IDE; 876 max_devs = MAX_IDE_DEVS; 877 pstrcpy(devname, sizeof(devname), "ide"); 878 } 879 media = MEDIA_DISK; 880 881 /* extract parameters */ 882 883 if (get_param_value(buf, sizeof(buf), "bus", str)) { 884 bus_id = strtol(buf, NULL, 0); 885 if (bus_id < 0) { 886 fprintf(stderr, "qemu: '%s' invalid bus id\n", str); 887 return -1; 888 } 889 } 890 891 if (get_param_value(buf, sizeof(buf), "unit", str)) { 892 unit_id = strtol(buf, NULL, 0); 893 if (unit_id < 0) { 894 fprintf(stderr, "qemu: '%s' invalid unit id\n", str); 895 return -1; 896 } 897 } 898 899 if (get_param_value(buf, sizeof(buf), "if", str)) { 900 pstrcpy(devname, sizeof(devname), buf); 901 if (!strcmp(buf, "ide")) { 902 type = IF_IDE; 903 max_devs = MAX_IDE_DEVS; 904 } else if (!strcmp(buf, "scsi")) { 905 type = IF_SCSI; 906 max_devs = MAX_SCSI_DEVS; 907 } else if (!strcmp(buf, "floppy")) { 908 type = IF_FLOPPY; 909 max_devs = 0; 910 } else if (!strcmp(buf, "pflash")) { 911 type = IF_PFLASH; 912 max_devs = 0; 913 } else if (!strcmp(buf, "mtd")) { 914 type = IF_MTD; 915 max_devs = 0; 916 } else if (!strcmp(buf, "sd")) { 917 type = IF_SD; 918 max_devs = 0; 919 } else if (!strcmp(buf, "virtio")) { 920 type = IF_VIRTIO; 921 max_devs = 0; 922 } else if (!strcmp(buf, "xen")) { 923 type = IF_XEN; 924 max_devs = 0; 925 } else { 926 fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf); 927 return -1; 928 } 929 } 930 931 if (get_param_value(buf, sizeof(buf), "index", str)) { 932 index = strtol(buf, NULL, 0); 933 if (index < 0) { 934 fprintf(stderr, "qemu: '%s' invalid index\n", str); 935 return -1; 936 } 937 } 938 939 if (get_param_value(buf, sizeof(buf), "cyls", str)) { 940 cyls = strtol(buf, NULL, 0); 941 } 942 943 if (get_param_value(buf, sizeof(buf), "heads", str)) { 944 heads = strtol(buf, NULL, 0); 945 } 946 947 if (get_param_value(buf, sizeof(buf), "secs", str)) { 948 secs = strtol(buf, NULL, 0); 949 } 950 951 if (cyls || heads || secs) { 952 if (cyls < 1 || cyls > 16383) { 953 fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str); 954 return -1; 955 } 956 if (heads < 1 || heads > 16) { 957 fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str); 958 return -1; 959 } 960 if (secs < 1 || secs > 63) { 961 fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str); 962 return -1; 963 } 964 } 965 966 if (get_param_value(buf, sizeof(buf), "trans", str)) { 967 if (!cyls) { 968 fprintf(stderr, 969 "qemu: '%s' trans must be used with cyls,heads and secs\n", 970 str); 971 return -1; 972 } 973 if (!strcmp(buf, "none")) 974 translation = BIOS_ATA_TRANSLATION_NONE; 975 else if (!strcmp(buf, "lba")) 976 translation = BIOS_ATA_TRANSLATION_LBA; 977 else if (!strcmp(buf, "auto")) 978 translation = BIOS_ATA_TRANSLATION_AUTO; 979 else { 980 fprintf(stderr, "qemu: '%s' invalid translation type\n", str); 981 return -1; 982 } 983 } 984 985 if (get_param_value(buf, sizeof(buf), "media", str)) { 986 if (!strcmp(buf, "disk")) { 987 media = MEDIA_DISK; 988 } else if (!strcmp(buf, "cdrom")) { 989 if (cyls || secs || heads) { 990 fprintf(stderr, 991 "qemu: '%s' invalid physical CHS format\n", str); 992 return -1; 993 } 994 media = MEDIA_CDROM; 995 } else { 996 fprintf(stderr, "qemu: '%s' invalid media\n", str); 997 return -1; 998 } 999 } 1000 1001 if (get_param_value(buf, sizeof(buf), "snapshot", str)) { 1002 if (!strcmp(buf, "on")) 1003 snapshot = 1; 1004 else if (!strcmp(buf, "off")) 1005 snapshot = 0; 1006 else { 1007 fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str); 1008 return -1; 1009 } 1010 } 1011 1012 if (get_param_value(buf, sizeof(buf), "cache", str)) { 1013 if (!strcmp(buf, "off") || !strcmp(buf, "none")) 1014 cache = 0; 1015 else if (!strcmp(buf, "writethrough")) 1016 cache = 1; 1017 else if (!strcmp(buf, "writeback")) 1018 cache = 2; 1019 else { 1020 fprintf(stderr, "qemu: invalid cache option\n"); 1021 return -1; 1022 } 1023 } 1024 1025 if (get_param_value(buf, sizeof(buf), "format", str)) { 1026 if (strcmp(buf, "?") == 0) { 1027 fprintf(stderr, "qemu: Supported formats:"); 1028 bdrv_iterate_format(bdrv_format_print, NULL); 1029 fprintf(stderr, "\n"); 1030 return -1; 1031 } 1032 drv = bdrv_find_format(buf); 1033 if (!drv) { 1034 fprintf(stderr, "qemu: '%s' invalid format\n", buf); 1035 return -1; 1036 } 1037 } 1038 1039 if (arg->file == NULL) 1040 get_param_value(file, sizeof(file), "file", str); 1041 else 1042 pstrcpy(file, sizeof(file), arg->file); 1043 1044 if (!get_param_value(serial, sizeof(serial), "serial", str)) 1045 memset(serial, 0, sizeof(serial)); 1046 1047 onerror = BLOCK_ERR_STOP_ENOSPC; 1048 if (get_param_value(buf, sizeof(serial), "werror", str)) { 1049 if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) { 1050 fprintf(stderr, "werror is no supported by this format\n"); 1051 return -1; 1052 } 1053 if (!strcmp(buf, "ignore")) 1054 onerror = BLOCK_ERR_IGNORE; 1055 else if (!strcmp(buf, "enospc")) 1056 onerror = BLOCK_ERR_STOP_ENOSPC; 1057 else if (!strcmp(buf, "stop")) 1058 onerror = BLOCK_ERR_STOP_ANY; 1059 else if (!strcmp(buf, "report")) 1060 onerror = BLOCK_ERR_REPORT; 1061 else { 1062 fprintf(stderr, "qemu: '%s' invalid write error action\n", buf); 1063 return -1; 1064 } 1065 } 1066 1067 /* compute bus and unit according index */ 1068 1069 if (index != -1) { 1070 if (bus_id != 0 || unit_id != -1) { 1071 fprintf(stderr, 1072 "qemu: '%s' index cannot be used with bus and unit\n", str); 1073 return -1; 1074 } 1075 if (max_devs == 0) 1076 { 1077 unit_id = index; 1078 bus_id = 0; 1079 } else { 1080 unit_id = index % max_devs; 1081 bus_id = index / max_devs; 1082 } 1083 } 1084 1085 /* if user doesn't specify a unit_id, 1086 * try to find the first free 1087 */ 1088 1089 if (unit_id == -1) { 1090 unit_id = 0; 1091 while (drive_get_index(type, bus_id, unit_id) != -1) { 1092 unit_id++; 1093 if (max_devs && unit_id >= max_devs) { 1094 unit_id -= max_devs; 1095 bus_id++; 1096 } 1097 } 1098 } 1099 1100 /* check unit id */ 1101 1102 if (max_devs && unit_id >= max_devs) { 1103 fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n", 1104 str, unit_id, max_devs - 1); 1105 return -1; 1106 } 1107 1108 /* 1109 * ignore multiple definitions 1110 */ 1111 1112 if (drive_get_index(type, bus_id, unit_id) != -1) 1113 return -2; 1114 1115 /* init */ 1116 1117 if (type == IF_IDE || type == IF_SCSI) 1118 mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd"; 1119 if (max_devs) 1120 snprintf(buf, sizeof(buf), "%s%i%s%i", 1121 devname, bus_id, mediastr, unit_id); 1122 else 1123 snprintf(buf, sizeof(buf), "%s%s%i", 1124 devname, mediastr, unit_id); 1125 bdrv = bdrv_new(buf); 1126 drives_table_idx = drive_get_free_idx(); 1127 drives_table[drives_table_idx].bdrv = bdrv; 1128 drives_table[drives_table_idx].type = type; 1129 drives_table[drives_table_idx].bus = bus_id; 1130 drives_table[drives_table_idx].unit = unit_id; 1131 drives_table[drives_table_idx].onerror = onerror; 1132 drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt; 1133 strncpy(drives_table[drives_table_idx].serial, serial, sizeof(serial)); 1134 nb_drives++; 1135 1136 switch(type) { 1137 case IF_IDE: 1138 case IF_SCSI: 1139 case IF_XEN: 1140 switch(media) { 1141 case MEDIA_DISK: 1142 if (cyls != 0) { 1143 bdrv_set_geometry_hint(bdrv, cyls, heads, secs); 1144 bdrv_set_translation_hint(bdrv, translation); 1145 } 1146 break; 1147 case MEDIA_CDROM: 1148 bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM); 1149 break; 1150 } 1151 break; 1152 case IF_SD: 1153 /* FIXME: This isn't really a floppy, but it's a reasonable 1154 approximation. */ 1155 case IF_FLOPPY: 1156 bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY); 1157 break; 1158 case IF_PFLASH: 1159 case IF_MTD: 1160 case IF_VIRTIO: 1161 break; 1162 case IF_COUNT: 1163 abort(); 1164 } 1165 if (!file[0]) 1166 return -2; 1167 bdrv_flags = 0; 1168 if (snapshot) { 1169 bdrv_flags |= BDRV_O_SNAPSHOT; 1170 cache = 2; /* always use write-back with snapshot */ 1171 } 1172 if (cache == 0) /* no caching */ 1173 bdrv_flags |= BDRV_O_NOCACHE; 1174 else if (cache == 2) /* write-back */ 1175 bdrv_flags |= BDRV_O_CACHE_WB; 1176 else if (cache == 3) /* not specified */ 1177 bdrv_flags |= BDRV_O_CACHE_DEF; 1178 if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) { 1179 fprintf(stderr, "qemu: could not open disk image %s\n", 1180 file); 1181 return -1; 1182 } 1183 if (bdrv_key_required(bdrv)) 1184 autostart = 0; 1185 return drives_table_idx; 1186} 1187 1188static void numa_add(const char *optarg) 1189{ 1190 char option[128]; 1191 char *endptr; 1192 unsigned long long value, endvalue; 1193 int nodenr; 1194 1195 optarg = get_opt_name(option, 128, optarg, ',') + 1; 1196 if (!strcmp(option, "node")) { 1197 if (get_param_value(option, 128, "nodeid", optarg) == 0) { 1198 nodenr = nb_numa_nodes; 1199 } else { 1200 nodenr = strtoull(option, NULL, 10); 1201 } 1202 1203 if (get_param_value(option, 128, "mem", optarg) == 0) { 1204 node_mem[nodenr] = 0; 1205 } else { 1206 value = strtoull(option, &endptr, 0); 1207 switch (*endptr) { 1208 case 0: case 'M': case 'm': 1209 value <<= 20; 1210 break; 1211 case 'G': case 'g': 1212 value <<= 30; 1213 break; 1214 } 1215 node_mem[nodenr] = value; 1216 } 1217 if (get_param_value(option, 128, "cpus", optarg) == 0) { 1218 node_cpumask[nodenr] = 0; 1219 } else { 1220 value = strtoull(option, &endptr, 10); 1221 if (value >= 64) { 1222 value = 63; 1223 fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n"); 1224 } else { 1225 if (*endptr == '-') { 1226 endvalue = strtoull(endptr+1, &endptr, 10); 1227 if (endvalue >= 63) { 1228 endvalue = 62; 1229 fprintf(stderr, 1230 "only 63 CPUs in NUMA mode supported.\n"); 1231 } 1232 value = (1 << (endvalue + 1)) - (1 << value); 1233 } else { 1234 value = 1 << value; 1235 } 1236 } 1237 node_cpumask[nodenr] = value; 1238 } 1239 nb_numa_nodes++; 1240 } 1241 return; 1242} 1243 1244/***********************************************************/ 1245/* USB devices */ 1246 1247static USBPort *used_usb_ports; 1248static USBPort *free_usb_ports; 1249 1250/* ??? Maybe change this to register a hub to keep track of the topology. */ 1251void qemu_register_usb_port(USBPort *port, void *opaque, int index, 1252 usb_attachfn attach) 1253{ 1254 port->opaque = opaque; 1255 port->index = index; 1256 port->attach = attach; 1257 port->next = free_usb_ports; 1258 free_usb_ports = port; 1259} 1260 1261int usb_device_add_dev(USBDevice *dev) 1262{ 1263 USBPort *port; 1264 1265 /* Find a USB port to add the device to. */ 1266 port = free_usb_ports; 1267 if (!port->next) { 1268 USBDevice *hub; 1269 1270 /* Create a new hub and chain it on. */ 1271 free_usb_ports = NULL; 1272 port->next = used_usb_ports; 1273 used_usb_ports = port; 1274 1275 hub = usb_hub_init(VM_USB_HUB_SIZE); 1276 usb_attach(port, hub); 1277 port = free_usb_ports; 1278 } 1279 1280 free_usb_ports = port->next; 1281 port->next = used_usb_ports; 1282 used_usb_ports = port; 1283 usb_attach(port, dev); 1284 return 0; 1285} 1286 1287static void usb_msd_password_cb(void *opaque, int err) 1288{ 1289 USBDevice *dev = opaque; 1290 1291 if (!err) 1292 usb_device_add_dev(dev); 1293 else 1294 dev->handle_destroy(dev); 1295} 1296 1297static int usb_device_add(const char *devname, int is_hotplug) 1298{ 1299 const char *p; 1300 USBDevice *dev; 1301 1302 if (!free_usb_ports) 1303 return -1; 1304 1305 if (strstart(devname, "host:", &p)) { 1306 dev = usb_host_device_open(p); 1307 } else if (!strcmp(devname, "mouse")) { 1308 dev = usb_mouse_init(); 1309 } else if (!strcmp(devname, "tablet")) { 1310 dev = usb_tablet_init(); 1311 } else if (!strcmp(devname, "keyboard")) { 1312 dev = usb_keyboard_init(); 1313 } else if (strstart(devname, "disk:", &p)) { 1314 BlockDriverState *bs; 1315 1316 dev = usb_msd_init(p); 1317 if (!dev) 1318 return -1; 1319 bs = usb_msd_get_bdrv(dev); 1320 if (bdrv_key_required(bs)) { 1321 autostart = 0; 1322 if (is_hotplug) { 1323 monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb, 1324 dev); 1325 return 0; 1326 } 1327 } 1328 } else if (!strcmp(devname, "wacom-tablet")) { 1329 dev = usb_wacom_init(); 1330 } else if (strstart(devname, "serial:", &p)) { 1331 dev = usb_serial_init(p); 1332#ifdef CONFIG_BRLAPI 1333 } else if (!strcmp(devname, "braille")) { 1334 dev = usb_baum_init(); 1335#endif 1336 } else if (strstart(devname, "net:", &p)) { 1337 int nic = nb_nics; 1338 1339 if (net_client_init(NULL, "nic", p) < 0) 1340 return -1; 1341 nd_table[nic].model = "usb"; 1342 dev = usb_net_init(&nd_table[nic]); 1343 } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) { 1344 dev = usb_bt_init(devname[2] ? hci_init(p) : 1345 bt_new_hci(qemu_find_bt_vlan(0))); 1346 } else { 1347 return -1; 1348 } 1349 if (!dev) 1350 return -1; 1351 1352 return usb_device_add_dev(dev); 1353} 1354 1355int usb_device_del_addr(int bus_num, int addr) 1356{ 1357 USBPort *port; 1358 USBPort **lastp; 1359 USBDevice *dev; 1360 1361 if (!used_usb_ports) 1362 return -1; 1363 1364 if (bus_num != 0) 1365 return -1; 1366 1367 lastp = &used_usb_ports; 1368 port = used_usb_ports; 1369 while (port && port->dev->addr != addr) { 1370 lastp = &port->next; 1371 port = port->next; 1372 } 1373 1374 if (!port) 1375 return -1; 1376 1377 dev = port->dev; 1378 *lastp = port->next; 1379 usb_attach(port, NULL); 1380 dev->handle_destroy(dev); 1381 port->next = free_usb_ports; 1382 free_usb_ports = port; 1383 return 0; 1384} 1385 1386static int usb_device_del(const char *devname) 1387{ 1388 int bus_num, addr; 1389 const char *p; 1390 1391 if (strstart(devname, "host:", &p)) 1392 return usb_host_device_close(p); 1393 1394 if (!used_usb_ports) 1395 return -1; 1396 1397 p = strchr(devname, '.'); 1398 if (!p) 1399 return -1; 1400 bus_num = strtoul(devname, NULL, 0); 1401 addr = strtoul(p + 1, NULL, 0); 1402 1403 return usb_device_del_addr(bus_num, addr); 1404} 1405 1406void do_usb_add(Monitor *mon, const char *devname) 1407{ 1408 usb_device_add(devname, 1); 1409} 1410 1411void do_usb_del(Monitor *mon, const char *devname) 1412{ 1413 usb_device_del(devname); 1414} 1415 1416void usb_info(Monitor *mon) 1417{ 1418 USBDevice *dev; 1419 USBPort *port; 1420 const char *speed_str; 1421 1422 if (!usb_enabled) { 1423 monitor_printf(mon, "USB support not enabled\n"); 1424 return; 1425 } 1426 1427 for (port = used_usb_ports; port; port = port->next) { 1428 dev = port->dev; 1429 if (!dev) 1430 continue; 1431 switch(dev->speed) { 1432 case USB_SPEED_LOW: 1433 speed_str = "1.5"; 1434 break; 1435 case USB_SPEED_FULL: 1436 speed_str = "12"; 1437 break; 1438 case USB_SPEED_HIGH: 1439 speed_str = "480"; 1440 break; 1441 default: 1442 speed_str = "?"; 1443 break; 1444 } 1445 monitor_printf(mon, " Device %d.%d, Speed %s Mb/s, Product %s\n", 1446 0, dev->addr, speed_str, dev->devname); 1447 } 1448} 1449 1450/***********************************************************/ 1451/* PCMCIA/Cardbus */ 1452 1453static struct pcmcia_socket_entry_s { 1454 PCMCIASocket *socket; 1455 struct pcmcia_socket_entry_s *next; 1456} *pcmcia_sockets = 0; 1457 1458void pcmcia_socket_register(PCMCIASocket *socket) 1459{ 1460 struct pcmcia_socket_entry_s *entry; 1461 1462 entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s)); 1463 entry->socket = socket; 1464 entry->next = pcmcia_sockets; 1465 pcmcia_sockets = entry; 1466} 1467 1468void pcmcia_socket_unregister(PCMCIASocket *socket) 1469{ 1470 struct pcmcia_socket_entry_s *entry, **ptr; 1471 1472 ptr = &pcmcia_sockets; 1473 for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr) 1474 if (entry->socket == socket) { 1475 *ptr = entry->next; 1476 qemu_free(entry); 1477 } 1478} 1479 1480void pcmcia_info(Monitor *mon) 1481{ 1482 struct pcmcia_socket_entry_s *iter; 1483 1484 if (!pcmcia_sockets) 1485 monitor_printf(mon, "No PCMCIA sockets\n"); 1486 1487 for (iter = pcmcia_sockets; iter; iter = iter->next) 1488 monitor_printf(mon, "%s: %s\n", iter->socket->slot_string, 1489 iter->socket->attached ? iter->socket->card_string : 1490 "Empty"); 1491} 1492 1493/***********************************************************/ 1494/* machine registration */ 1495 1496static QEMUMachine *first_machine = NULL; 1497QEMUMachine *current_machine = NULL; 1498 1499int qemu_register_machine(QEMUMachine *m) 1500{ 1501 QEMUMachine **pm; 1502 pm = &first_machine; 1503 while (*pm != NULL) 1504 pm = &(*pm)->next; 1505 m->next = NULL; 1506 *pm = m; 1507 return 0; 1508} 1509 1510static QEMUMachine *find_machine(const char *name) 1511{ 1512 QEMUMachine *m; 1513 1514 for(m = first_machine; m != NULL; m = m->next) { 1515 if (!strcmp(m->name, name)) 1516 return m; 1517 } 1518 return NULL; 1519} 1520 1521static QEMUMachine *find_default_machine(void) 1522{ 1523 QEMUMachine *m; 1524 1525 for(m = first_machine; m != NULL; m = m->next) { 1526 if (m->is_default) { 1527 return m; 1528 } 1529 } 1530 return NULL; 1531} 1532 1533/***********************************************************/ 1534/* main execution loop */ 1535 1536static void gui_update(void *opaque) 1537{ 1538 uint64_t interval = GUI_REFRESH_INTERVAL; 1539 DisplayState *ds = opaque; 1540 DisplayChangeListener *dcl = ds->listeners; 1541 1542 dpy_refresh(ds); 1543 1544 while (dcl != NULL) { 1545 if (dcl->gui_timer_interval && 1546 dcl->gui_timer_interval < interval) 1547 interval = dcl->gui_timer_interval; 1548 dcl = dcl->next; 1549 } 1550 qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock_ms(rt_clock)); 1551} 1552 1553static void nographic_update(void *opaque) 1554{ 1555 uint64_t interval = GUI_REFRESH_INTERVAL; 1556 1557 qemu_mod_timer(nographic_timer, interval + qemu_get_clock_ms(rt_clock)); 1558} 1559 1560struct vm_change_state_entry { 1561 VMChangeStateHandler *cb; 1562 void *opaque; 1563 QLIST_ENTRY (vm_change_state_entry) entries; 1564}; 1565 1566static QLIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head; 1567 1568VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb, 1569 void *opaque) 1570{ 1571 VMChangeStateEntry *e; 1572 1573 e = qemu_mallocz(sizeof (*e)); 1574 1575 e->cb = cb; 1576 e->opaque = opaque; 1577 QLIST_INSERT_HEAD(&vm_change_state_head, e, entries); 1578 return e; 1579} 1580 1581void qemu_del_vm_change_state_handler(VMChangeStateEntry *e) 1582{ 1583 QLIST_REMOVE (e, entries); 1584 qemu_free (e); 1585} 1586 1587void vm_state_notify(int running, int reason) 1588{ 1589 VMChangeStateEntry *e; 1590 1591 for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) { 1592 e->cb(e->opaque, running, reason); 1593 } 1594} 1595 1596void vm_start(void) 1597{ 1598 if (!vm_running) { 1599 cpu_enable_ticks(); 1600 vm_running = 1; 1601 vm_state_notify(1, 0); 1602 //qemu_rearm_alarm_timer(alarm_timer); 1603 resume_all_vcpus(); 1604 } 1605} 1606 1607/* reset/shutdown handler */ 1608 1609typedef struct QEMUResetEntry { 1610 QTAILQ_ENTRY(QEMUResetEntry) entry; 1611 QEMUResetHandler *func; 1612 void *opaque; 1613} QEMUResetEntry; 1614 1615static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers = 1616 QTAILQ_HEAD_INITIALIZER(reset_handlers); 1617static int reset_requested; 1618static int shutdown_requested, shutdown_signal = -1; 1619static pid_t shutdown_pid; 1620static int powerdown_requested; 1621int debug_requested; 1622static int vmstop_requested; 1623 1624int qemu_shutdown_requested(void) 1625{ 1626 int r = shutdown_requested; 1627 shutdown_requested = 0; 1628 return r; 1629} 1630 1631int qemu_reset_requested(void) 1632{ 1633 int r = reset_requested; 1634 reset_requested = 0; 1635 return r; 1636} 1637 1638int qemu_powerdown_requested(void) 1639{ 1640 int r = powerdown_requested; 1641 powerdown_requested = 0; 1642 return r; 1643} 1644 1645static int qemu_debug_requested(void) 1646{ 1647 int r = debug_requested; 1648 debug_requested = 0; 1649 return r; 1650} 1651 1652static int qemu_vmstop_requested(void) 1653{ 1654 int r = vmstop_requested; 1655 vmstop_requested = 0; 1656 return r; 1657} 1658 1659void qemu_register_reset(QEMUResetHandler *func, int order, void *opaque) 1660{ 1661 QEMUResetEntry **pre, *re; 1662 1663 pre = &first_reset_entry; 1664 while (*pre != NULL && (*pre)->order >= order) { 1665 pre = &(*pre)->next; 1666 } 1667 re = qemu_mallocz(sizeof(QEMUResetEntry)); 1668 re->func = func; 1669 re->opaque = opaque; 1670 re->order = order; 1671 re->next = NULL; 1672 *pre = re; 1673} 1674 1675void qemu_system_reset(void) 1676{ 1677 QEMUResetEntry *re; 1678 1679 /* reset all devices */ 1680 QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) { 1681 re->func(re->opaque); 1682 } 1683} 1684 1685void qemu_system_reset_request(void) 1686{ 1687 if (no_reboot) { 1688 shutdown_requested = 1; 1689 } else { 1690 reset_requested = 1; 1691 } 1692 qemu_notify_event(); 1693} 1694 1695void qemu_system_killed(int signal, pid_t pid) 1696{ 1697 shutdown_signal = signal; 1698 shutdown_pid = pid; 1699 qemu_system_shutdown_request(); 1700} 1701 1702void qemu_system_shutdown_request(void) 1703{ 1704 shutdown_requested = 1; 1705 qemu_notify_event(); 1706} 1707 1708void qemu_system_powerdown_request(void) 1709{ 1710 powerdown_requested = 1; 1711 qemu_notify_event(); 1712} 1713 1714#ifdef CONFIG_IOTHREAD 1715static void qemu_system_vmstop_request(int reason) 1716{ 1717 vmstop_requested = reason; 1718 qemu_notify_event(); 1719} 1720#endif 1721 1722void main_loop_wait(int timeout) 1723{ 1724 fd_set rfds, wfds, xfds; 1725 int ret, nfds; 1726 struct timeval tv; 1727 1728 qemu_bh_update_timeout(&timeout); 1729 1730 os_host_main_loop_wait(&timeout); 1731 1732 1733 tv.tv_sec = timeout / 1000; 1734 tv.tv_usec = (timeout % 1000) * 1000; 1735 1736 /* poll any events */ 1737 1738 /* XXX: separate device handlers from system ones */ 1739 nfds = -1; 1740 FD_ZERO(&rfds); 1741 FD_ZERO(&wfds); 1742 FD_ZERO(&xfds); 1743 qemu_iohandler_fill(&nfds, &rfds, &wfds, &xfds); 1744 if (slirp_is_inited()) { 1745 slirp_select_fill(&nfds, &rfds, &wfds, &xfds); 1746 } 1747 1748 qemu_mutex_unlock_iothread(); 1749 ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv); 1750 qemu_mutex_lock_iothread(); 1751 qemu_iohandler_poll(&rfds, &wfds, &xfds, ret); 1752 if (slirp_is_inited()) { 1753 if (ret < 0) { 1754 FD_ZERO(&rfds); 1755 FD_ZERO(&wfds); 1756 FD_ZERO(&xfds); 1757 } 1758 slirp_select_poll(&rfds, &wfds, &xfds); 1759 } 1760 1761 qemu_run_all_timers(); 1762 1763 /* Check bottom-halves last in case any of the earlier events triggered 1764 them. */ 1765 qemu_bh_poll(); 1766 1767} 1768 1769static int vm_can_run(void) 1770{ 1771 if (powerdown_requested) 1772 return 0; 1773 if (reset_requested) 1774 return 0; 1775 if (shutdown_requested) 1776 return 0; 1777 if (debug_requested) 1778 return 0; 1779 return 1; 1780} 1781 1782static void main_loop(void) 1783{ 1784 int r; 1785 1786#ifdef CONFIG_IOTHREAD 1787 qemu_system_ready = 1; 1788 qemu_cond_broadcast(&qemu_system_cond); 1789#endif 1790 1791 for (;;) { 1792 do { 1793#ifdef CONFIG_PROFILER 1794 int64_t ti; 1795#endif 1796#ifndef CONFIG_IOTHREAD 1797 tcg_cpu_exec(); 1798#endif 1799#ifdef CONFIG_PROFILER 1800 ti = profile_getclock(); 1801#endif 1802 main_loop_wait(qemu_calculate_timeout()); 1803#ifdef CONFIG_PROFILER 1804 dev_time += profile_getclock() - ti; 1805#endif 1806 } while (vm_can_run()); 1807 1808 if (qemu_debug_requested()) 1809 vm_stop(EXCP_DEBUG); 1810 if (qemu_shutdown_requested()) { 1811 if (no_shutdown) { 1812 vm_stop(0); 1813 no_shutdown = 0; 1814 } else 1815 break; 1816 } 1817 if (qemu_reset_requested()) { 1818 pause_all_vcpus(); 1819 qemu_system_reset(); 1820 resume_all_vcpus(); 1821 } 1822 if (qemu_powerdown_requested()) 1823 qemu_system_powerdown(); 1824 if ((r = qemu_vmstop_requested())) 1825 vm_stop(r); 1826 } 1827 pause_all_vcpus(); 1828} 1829 1830static void version(void) 1831{ 1832 printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n"); 1833} 1834 1835static void help(int exitcode) 1836{ 1837 version(); 1838 printf("usage: %s [options] [disk_image]\n" 1839 "\n" 1840 "'disk_image' is a raw hard image image for IDE hard disk 0\n" 1841 "\n" 1842#define DEF(option, opt_arg, opt_enum, opt_help) \ 1843 opt_help 1844#define DEFHEADING(text) stringify(text) "\n" 1845#include "qemu-options.def" 1846#undef DEF 1847#undef DEFHEADING 1848#undef GEN_DOCS 1849 "\n" 1850 "During emulation, the following keys are useful:\n" 1851 "ctrl-alt-f toggle full screen\n" 1852 "ctrl-alt-n switch to virtual console 'n'\n" 1853 "ctrl-alt toggle mouse and keyboard grab\n" 1854 "\n" 1855 "When using -nographic, press 'ctrl-a h' to get some help.\n" 1856 , 1857 "qemu", 1858 DEFAULT_RAM_SIZE, 1859#ifndef _WIN32 1860 DEFAULT_NETWORK_SCRIPT, 1861 DEFAULT_NETWORK_DOWN_SCRIPT, 1862#endif 1863 DEFAULT_GDBSTUB_PORT, 1864 "/tmp/qemu.log"); 1865 exit(exitcode); 1866} 1867 1868#define HAS_ARG 0x0001 1869 1870enum { 1871#define DEF(option, opt_arg, opt_enum, opt_help) \ 1872 opt_enum, 1873#define DEFHEADING(text) 1874#include "qemu-options.def" 1875#undef DEF 1876#undef DEFHEADING 1877#undef GEN_DOCS 1878}; 1879 1880typedef struct QEMUOption { 1881 const char *name; 1882 int flags; 1883 int index; 1884} QEMUOption; 1885 1886static const QEMUOption qemu_options[] = { 1887 { "h", 0, QEMU_OPTION_h }, 1888#define DEF(option, opt_arg, opt_enum, opt_help) \ 1889 { option, opt_arg, opt_enum }, 1890#define DEFHEADING(text) 1891#include "qemu-options.def" 1892#undef DEF 1893#undef DEFHEADING 1894#undef GEN_DOCS 1895 { NULL, 0, 0 }, 1896}; 1897 1898static void select_vgahw (const char *p) 1899{ 1900 const char *opts; 1901 1902 cirrus_vga_enabled = 0; 1903 std_vga_enabled = 0; 1904 vmsvga_enabled = 0; 1905 xenfb_enabled = 0; 1906 if (strstart(p, "std", &opts)) { 1907 std_vga_enabled = 1; 1908 } else if (strstart(p, "cirrus", &opts)) { 1909 cirrus_vga_enabled = 1; 1910 } else if (strstart(p, "vmware", &opts)) { 1911 vmsvga_enabled = 1; 1912 } else if (strstart(p, "xenfb", &opts)) { 1913 xenfb_enabled = 1; 1914 } else if (!strstart(p, "none", &opts)) { 1915 invalid_vga: 1916 fprintf(stderr, "Unknown vga type: %s\n", p); 1917 exit(1); 1918 } 1919 while (*opts) { 1920 const char *nextopt; 1921 1922 if (strstart(opts, ",retrace=", &nextopt)) { 1923 opts = nextopt; 1924 if (strstart(opts, "dumb", &nextopt)) 1925 vga_retrace_method = VGA_RETRACE_DUMB; 1926 else if (strstart(opts, "precise", &nextopt)) 1927 vga_retrace_method = VGA_RETRACE_PRECISE; 1928 else goto invalid_vga; 1929 } else goto invalid_vga; 1930 opts = nextopt; 1931 } 1932} 1933 1934#define MAX_NET_CLIENTS 32 1935 1936#ifdef _WIN32 1937/* Look for support files in the same directory as the executable. */ 1938static char *find_datadir(const char *argv0) 1939{ 1940 char *p; 1941 char buf[MAX_PATH]; 1942 DWORD len; 1943 1944 len = GetModuleFileName(NULL, buf, sizeof(buf) - 1); 1945 if (len == 0) { 1946 return NULL; 1947 } 1948 1949 buf[len] = 0; 1950 p = buf + len - 1; 1951 while (p != buf && *p != '\\') 1952 p--; 1953 *p = 0; 1954 if (access(buf, R_OK) == 0) { 1955 return qemu_strdup(buf); 1956 } 1957 return NULL; 1958} 1959#else /* !_WIN32 */ 1960 1961/* Find a likely location for support files using the location of the binary. 1962 For installed binaries this will be "$bindir/../share/qemu". When 1963 running from the build tree this will be "$bindir/../pc-bios". */ 1964#define SHARE_SUFFIX "/share/qemu" 1965#define BUILD_SUFFIX "/pc-bios" 1966static char *find_datadir(const char *argv0) 1967{ 1968 char *dir; 1969 char *p = NULL; 1970 char *res; 1971#ifdef PATH_MAX 1972 char buf[PATH_MAX]; 1973#endif 1974 size_t max_len; 1975 1976#if defined(__linux__) 1977 { 1978 int len; 1979 len = readlink("/proc/self/exe", buf, sizeof(buf) - 1); 1980 if (len > 0) { 1981 buf[len] = 0; 1982 p = buf; 1983 } 1984 } 1985#elif defined(__FreeBSD__) 1986 { 1987 int len; 1988 len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1); 1989 if (len > 0) { 1990 buf[len] = 0; 1991 p = buf; 1992 } 1993 } 1994#endif 1995 /* If we don't have any way of figuring out the actual executable 1996 location then try argv[0]. */ 1997 if (!p) { 1998#ifdef PATH_MAX 1999 p = buf; 2000#endif 2001 p = realpath(argv0, p); 2002 if (!p) { 2003 return NULL; 2004 } 2005 } 2006 dir = dirname(p); 2007 dir = dirname(dir); 2008 2009 max_len = strlen(dir) + 2010 MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1; 2011 res = qemu_mallocz(max_len); 2012 snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX); 2013 if (access(res, R_OK)) { 2014 snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX); 2015 if (access(res, R_OK)) { 2016 qemu_free(res); 2017 res = NULL; 2018 } 2019 } 2020#ifndef PATH_MAX 2021 free(p); 2022#endif 2023 return res; 2024} 2025#undef SHARE_SUFFIX 2026#undef BUILD_SUFFIX 2027#endif 2028 2029char *qemu_find_file(int type, const char *name) 2030{ 2031 int len; 2032 const char *subdir; 2033 char *buf; 2034 2035 /* If name contains path separators then try it as a straight path. */ 2036 if ((strchr(name, '/') || strchr(name, '\\')) 2037 && access(name, R_OK) == 0) { 2038 return qemu_strdup(name); 2039 } 2040 switch (type) { 2041 case QEMU_FILE_TYPE_BIOS: 2042 subdir = ""; 2043 break; 2044 case QEMU_FILE_TYPE_KEYMAP: 2045 subdir = "keymaps/"; 2046 break; 2047 default: 2048 abort(); 2049 } 2050 len = strlen(data_dir) + strlen(name) + strlen(subdir) + 2; 2051 buf = qemu_mallocz(len); 2052 snprintf(buf, len, "%s/%s%s", data_dir, subdir, name); 2053 if (access(buf, R_OK)) { 2054 qemu_free(buf); 2055 return NULL; 2056 } 2057 return buf; 2058} 2059 2060int main(int argc, char **argv, char **envp) 2061{ 2062 const char *gdbstub_dev = NULL; 2063 uint32_t boot_devices_bitmap = 0; 2064 int i; 2065 int snapshot, linux_boot, net_boot; 2066 const char *icount_option = NULL; 2067 const char *initrd_filename; 2068 const char *kernel_filename, *kernel_cmdline; 2069 const char *boot_devices = ""; 2070 DisplayState *ds; 2071 DisplayChangeListener *dcl; 2072 int cyls, heads, secs, translation; 2073 const char *net_clients[MAX_NET_CLIENTS]; 2074 int nb_net_clients; 2075 const char *bt_opts[MAX_BT_CMDLINE]; 2076 int nb_bt_opts; 2077 int hda_index; 2078 int optind; 2079 const char *r, *optarg; 2080 CharDriverState *monitor_hd = NULL; 2081 const char *monitor_device; 2082 const char *serial_devices[MAX_SERIAL_PORTS]; 2083 int serial_device_index; 2084 const char *parallel_devices[MAX_PARALLEL_PORTS]; 2085 int parallel_device_index; 2086 const char *virtio_consoles[MAX_VIRTIO_CONSOLES]; 2087 int virtio_console_index; 2088 const char *loadvm = NULL; 2089 QEMUMachine *machine; 2090 const char *cpu_model; 2091 const char *usb_devices[MAX_USB_CMDLINE]; 2092 int usb_devices_index; 2093 int tb_size; 2094 const char *pid_file = NULL; 2095 const char *incoming = NULL; 2096 CPUState *env; 2097 int show_vnc_port = 0; 2098 2099 init_clocks(); 2100 2101 qemu_cache_utils_init(envp); 2102 2103 QLIST_INIT (&vm_change_state_head); 2104 os_setup_early_signal_handling(); 2105 2106 module_call_init(MODULE_INIT_MACHINE); 2107 machine = find_default_machine(); 2108 cpu_model = NULL; 2109 initrd_filename = NULL; 2110 ram_size = 0; 2111 snapshot = 0; 2112 kernel_filename = NULL; 2113 kernel_cmdline = ""; 2114 cyls = heads = secs = 0; 2115 translation = BIOS_ATA_TRANSLATION_AUTO; 2116 monitor_device = "vc:80Cx24C"; 2117 2118 serial_devices[0] = "vc:80Cx24C"; 2119 for(i = 1; i < MAX_SERIAL_PORTS; i++) 2120 serial_devices[i] = NULL; 2121 serial_device_index = 0; 2122 2123 parallel_devices[0] = "vc:80Cx24C"; 2124 for(i = 1; i < MAX_PARALLEL_PORTS; i++) 2125 parallel_devices[i] = NULL; 2126 parallel_device_index = 0; 2127 2128 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) 2129 virtio_consoles[i] = NULL; 2130 virtio_console_index = 0; 2131 2132 for (i = 0; i < MAX_NODES; i++) { 2133 node_mem[i] = 0; 2134 node_cpumask[i] = 0; 2135 } 2136 2137 usb_devices_index = 0; 2138 2139 nb_net_clients = 0; 2140 nb_bt_opts = 0; 2141 nb_drives = 0; 2142 nb_drives_opt = 0; 2143 nb_numa_nodes = 0; 2144 hda_index = -1; 2145 2146 nb_nics = 0; 2147 2148 tb_size = 0; 2149 autostart= 1; 2150 2151 register_watchdogs(); 2152 2153 optind = 1; 2154 for(;;) { 2155 if (optind >= argc) 2156 break; 2157 r = argv[optind]; 2158 if (r[0] != '-') { 2159 hda_index = drive_add(argv[optind++], HD_ALIAS, 0); 2160 } else { 2161 const QEMUOption *popt; 2162 2163 optind++; 2164 /* Treat --foo the same as -foo. */ 2165 if (r[1] == '-') 2166 r++; 2167 popt = qemu_options; 2168 for(;;) { 2169 if (!popt->name) { 2170 fprintf(stderr, "%s: invalid option -- '%s'\n", 2171 argv[0], r); 2172 exit(1); 2173 } 2174 if (!strcmp(popt->name, r + 1)) 2175 break; 2176 popt++; 2177 } 2178 if (popt->flags & HAS_ARG) { 2179 if (optind >= argc) { 2180 fprintf(stderr, "%s: option '%s' requires an argument\n", 2181 argv[0], r); 2182 exit(1); 2183 } 2184 optarg = argv[optind++]; 2185 } else { 2186 optarg = NULL; 2187 } 2188 2189 switch(popt->index) { 2190 case QEMU_OPTION_M: 2191 machine = find_machine(optarg); 2192 if (!machine) { 2193 QEMUMachine *m; 2194 printf("Supported machines are:\n"); 2195 for(m = first_machine; m != NULL; m = m->next) { 2196 printf("%-10s %s%s\n", 2197 m->name, m->desc, 2198 m->is_default ? " (default)" : ""); 2199 } 2200 exit(*optarg != '?'); 2201 } 2202 break; 2203 case QEMU_OPTION_cpu: 2204 /* hw initialization will check this */ 2205 if (*optarg == '?') { 2206/* XXX: implement xxx_cpu_list for targets that still miss it */ 2207#if defined(cpu_list) 2208 cpu_list(stdout, &fprintf); 2209#endif 2210 exit(0); 2211 } else { 2212 cpu_model = optarg; 2213 } 2214 break; 2215 case QEMU_OPTION_initrd: 2216 initrd_filename = optarg; 2217 break; 2218 case QEMU_OPTION_hda: 2219 if (cyls == 0) 2220 hda_index = drive_add(optarg, HD_ALIAS, 0); 2221 else 2222 hda_index = drive_add(optarg, HD_ALIAS 2223 ",cyls=%d,heads=%d,secs=%d%s", 2224 0, cyls, heads, secs, 2225 translation == BIOS_ATA_TRANSLATION_LBA ? 2226 ",trans=lba" : 2227 translation == BIOS_ATA_TRANSLATION_NONE ? 2228 ",trans=none" : ""); 2229 break; 2230 case QEMU_OPTION_hdb: 2231 case QEMU_OPTION_hdc: 2232 case QEMU_OPTION_hdd: 2233 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda); 2234 break; 2235 case QEMU_OPTION_drive: 2236 drive_add(NULL, "%s", optarg); 2237 break; 2238 case QEMU_OPTION_mtdblock: 2239 drive_add(optarg, MTD_ALIAS); 2240 break; 2241 case QEMU_OPTION_sd: 2242 drive_add(optarg, SD_ALIAS); 2243 break; 2244 case QEMU_OPTION_pflash: 2245 drive_add(optarg, PFLASH_ALIAS); 2246 break; 2247 case QEMU_OPTION_snapshot: 2248 snapshot = 1; 2249 break; 2250 case QEMU_OPTION_hdachs: 2251 { 2252 const char *p; 2253 p = optarg; 2254 cyls = strtol(p, (char **)&p, 0); 2255 if (cyls < 1 || cyls > 16383) 2256 goto chs_fail; 2257 if (*p != ',') 2258 goto chs_fail; 2259 p++; 2260 heads = strtol(p, (char **)&p, 0); 2261 if (heads < 1 || heads > 16) 2262 goto chs_fail; 2263 if (*p != ',') 2264 goto chs_fail; 2265 p++; 2266 secs = strtol(p, (char **)&p, 0); 2267 if (secs < 1 || secs > 63) 2268 goto chs_fail; 2269 if (*p == ',') { 2270 p++; 2271 if (!strcmp(p, "none")) 2272 translation = BIOS_ATA_TRANSLATION_NONE; 2273 else if (!strcmp(p, "lba")) 2274 translation = BIOS_ATA_TRANSLATION_LBA; 2275 else if (!strcmp(p, "auto")) 2276 translation = BIOS_ATA_TRANSLATION_AUTO; 2277 else 2278 goto chs_fail; 2279 } else if (*p != '\0') { 2280 chs_fail: 2281 fprintf(stderr, "qemu: invalid physical CHS format\n"); 2282 exit(1); 2283 } 2284 if (hda_index != -1) 2285 snprintf(drives_opt[hda_index].opt, 2286 sizeof(drives_opt[hda_index].opt), 2287 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s", 2288 0, cyls, heads, secs, 2289 translation == BIOS_ATA_TRANSLATION_LBA ? 2290 ",trans=lba" : 2291 translation == BIOS_ATA_TRANSLATION_NONE ? 2292 ",trans=none" : ""); 2293 } 2294 break; 2295 case QEMU_OPTION_numa: 2296 if (nb_numa_nodes >= MAX_NODES) { 2297 fprintf(stderr, "qemu: too many NUMA nodes\n"); 2298 exit(1); 2299 } 2300 numa_add(optarg); 2301 break; 2302 case QEMU_OPTION_nographic: 2303 display_type = DT_NOGRAPHIC; 2304 break; 2305#ifdef CONFIG_CURSES 2306 case QEMU_OPTION_curses: 2307 display_type = DT_CURSES; 2308 break; 2309#endif 2310 case QEMU_OPTION_portrait: 2311 graphic_rotate = 1; 2312 break; 2313 case QEMU_OPTION_kernel: 2314 kernel_filename = optarg; 2315 break; 2316 case QEMU_OPTION_append: 2317 kernel_cmdline = optarg; 2318 break; 2319 case QEMU_OPTION_cdrom: 2320 drive_add(optarg, CDROM_ALIAS); 2321 break; 2322 case QEMU_OPTION_boot: 2323 boot_devices = optarg; 2324 /* We just do some generic consistency checks */ 2325 { 2326 /* Could easily be extended to 64 devices if needed */ 2327 const char *p; 2328 2329 boot_devices_bitmap = 0; 2330 for (p = boot_devices; *p != '\0'; p++) { 2331 /* Allowed boot devices are: 2332 * a b : floppy disk drives 2333 * c ... f : IDE disk drives 2334 * g ... m : machine implementation dependant drives 2335 * n ... p : network devices 2336 * It's up to each machine implementation to check 2337 * if the given boot devices match the actual hardware 2338 * implementation and firmware features. 2339 */ 2340 if (*p < 'a' || *p > 'q') { 2341 fprintf(stderr, "Invalid boot device '%c'\n", *p); 2342 exit(1); 2343 } 2344 if (boot_devices_bitmap & (1 << (*p - 'a'))) { 2345 fprintf(stderr, 2346 "Boot device '%c' was given twice\n",*p); 2347 exit(1); 2348 } 2349 boot_devices_bitmap |= 1 << (*p - 'a'); 2350 } 2351 } 2352 break; 2353 case QEMU_OPTION_fda: 2354 case QEMU_OPTION_fdb: 2355 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda); 2356 break; 2357#ifdef TARGET_I386 2358 case QEMU_OPTION_no_fd_bootchk: 2359 fd_bootchk = 0; 2360 break; 2361#endif 2362 case QEMU_OPTION_net: 2363 if (nb_net_clients >= MAX_NET_CLIENTS) { 2364 fprintf(stderr, "qemu: too many network clients\n"); 2365 exit(1); 2366 } 2367 net_clients[nb_net_clients] = optarg; 2368 nb_net_clients++; 2369 break; 2370#ifdef CONFIG_SLIRP 2371 case QEMU_OPTION_tftp: 2372 tftp_prefix = optarg; 2373 break; 2374 case QEMU_OPTION_bootp: 2375 bootp_filename = optarg; 2376 break; 2377 case QEMU_OPTION_redir: 2378 net_slirp_redir(NULL, optarg, NULL); 2379 break; 2380#endif 2381 case QEMU_OPTION_bt: 2382 if (nb_bt_opts >= MAX_BT_CMDLINE) { 2383 fprintf(stderr, "qemu: too many bluetooth options\n"); 2384 exit(1); 2385 } 2386 bt_opts[nb_bt_opts++] = optarg; 2387 break; 2388#ifdef HAS_AUDIO 2389 case QEMU_OPTION_audio_help: 2390 AUD_help (); 2391 exit (0); 2392 break; 2393 case QEMU_OPTION_soundhw: 2394 select_soundhw (optarg); 2395 break; 2396#endif 2397 case QEMU_OPTION_h: 2398 help(0); 2399 break; 2400 case QEMU_OPTION_version: 2401 version(); 2402 exit(0); 2403 break; 2404 case QEMU_OPTION_m: { 2405 uint64_t value; 2406 char *ptr; 2407 2408 value = strtoul(optarg, &ptr, 10); 2409 switch (*ptr) { 2410 case 0: case 'M': case 'm': 2411 value <<= 20; 2412 break; 2413 case 'G': case 'g': 2414 value <<= 30; 2415 break; 2416 default: 2417 fprintf(stderr, "qemu: invalid ram size: %s\n", optarg); 2418 exit(1); 2419 } 2420 2421 /* On 32-bit hosts, QEMU is limited by virtual address space */ 2422 if (value > (2047 << 20) && HOST_LONG_BITS == 32) { 2423 fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n"); 2424 exit(1); 2425 } 2426 if (value != (uint64_t)(ram_addr_t)value) { 2427 fprintf(stderr, "qemu: ram size too large\n"); 2428 exit(1); 2429 } 2430 ram_size = value; 2431 break; 2432 } 2433 case QEMU_OPTION_d: 2434 { 2435 int mask; 2436 const CPULogItem *item; 2437 2438 mask = cpu_str_to_log_mask(optarg); 2439 if (!mask) { 2440 printf("Log items (comma separated):\n"); 2441 for(item = cpu_log_items; item->mask != 0; item++) { 2442 printf("%-10s %s\n", item->name, item->help); 2443 } 2444 exit(1); 2445 } 2446 cpu_set_log(mask); 2447 } 2448 break; 2449 case QEMU_OPTION_s: 2450 gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT; 2451 break; 2452 case QEMU_OPTION_gdb: 2453 gdbstub_dev = optarg; 2454 break; 2455 case QEMU_OPTION_L: 2456 data_dir = optarg; 2457 break; 2458 case QEMU_OPTION_bios: 2459 bios_name = optarg; 2460 break; 2461 case QEMU_OPTION_singlestep: 2462 singlestep = 1; 2463 break; 2464 case QEMU_OPTION_S: 2465 autostart = 0; 2466 break; 2467#ifndef _WIN32 2468 case QEMU_OPTION_k: 2469 keyboard_layout = optarg; 2470 break; 2471#endif 2472 case QEMU_OPTION_localtime: 2473 rtc_utc = 0; 2474 break; 2475 case QEMU_OPTION_vga: 2476 select_vgahw (optarg); 2477 break; 2478#if defined(TARGET_PPC) || defined(TARGET_SPARC) 2479 case QEMU_OPTION_g: 2480 { 2481 const char *p; 2482 int w, h, depth; 2483 p = optarg; 2484 w = strtol(p, (char **)&p, 10); 2485 if (w <= 0) { 2486 graphic_error: 2487 fprintf(stderr, "qemu: invalid resolution or depth\n"); 2488 exit(1); 2489 } 2490 if (*p != 'x') 2491 goto graphic_error; 2492 p++; 2493 h = strtol(p, (char **)&p, 10); 2494 if (h <= 0) 2495 goto graphic_error; 2496 if (*p == 'x') { 2497 p++; 2498 depth = strtol(p, (char **)&p, 10); 2499 if (depth != 8 && depth != 15 && depth != 16 && 2500 depth != 24 && depth != 32) 2501 goto graphic_error; 2502 } else if (*p == '\0') { 2503 depth = graphic_depth; 2504 } else { 2505 goto graphic_error; 2506 } 2507 2508 graphic_width = w; 2509 graphic_height = h; 2510 graphic_depth = depth; 2511 } 2512 break; 2513#endif 2514 case QEMU_OPTION_echr: 2515 { 2516 char *r; 2517 term_escape_char = strtol(optarg, &r, 0); 2518 if (r == optarg) 2519 printf("Bad argument to echr\n"); 2520 break; 2521 } 2522 case QEMU_OPTION_monitor: 2523 monitor_device = optarg; 2524 break; 2525 case QEMU_OPTION_serial: 2526 if (serial_device_index >= MAX_SERIAL_PORTS) { 2527 fprintf(stderr, "qemu: too many serial ports\n"); 2528 exit(1); 2529 } 2530 serial_devices[serial_device_index] = optarg; 2531 serial_device_index++; 2532 break; 2533 case QEMU_OPTION_watchdog: 2534 i = select_watchdog(optarg); 2535 if (i > 0) 2536 exit (i == 1 ? 1 : 0); 2537 break; 2538 case QEMU_OPTION_watchdog_action: 2539 if (select_watchdog_action(optarg) == -1) { 2540 fprintf(stderr, "Unknown -watchdog-action parameter\n"); 2541 exit(1); 2542 } 2543 break; 2544 case QEMU_OPTION_virtiocon: 2545 if (virtio_console_index >= MAX_VIRTIO_CONSOLES) { 2546 fprintf(stderr, "qemu: too many virtio consoles\n"); 2547 exit(1); 2548 } 2549 virtio_consoles[virtio_console_index] = optarg; 2550 virtio_console_index++; 2551 break; 2552 case QEMU_OPTION_parallel: 2553 if (parallel_device_index >= MAX_PARALLEL_PORTS) { 2554 fprintf(stderr, "qemu: too many parallel ports\n"); 2555 exit(1); 2556 } 2557 parallel_devices[parallel_device_index] = optarg; 2558 parallel_device_index++; 2559 break; 2560 case QEMU_OPTION_loadvm: 2561 loadvm = optarg; 2562 break; 2563 case QEMU_OPTION_full_screen: 2564 full_screen = 1; 2565 break; 2566#ifdef CONFIG_SDL 2567 case QEMU_OPTION_no_frame: 2568 no_frame = 1; 2569 break; 2570 case QEMU_OPTION_alt_grab: 2571 alt_grab = 1; 2572 break; 2573 case QEMU_OPTION_no_quit: 2574 no_quit = 1; 2575 break; 2576 case QEMU_OPTION_sdl: 2577 display_type = DT_SDL; 2578 break; 2579#endif 2580 case QEMU_OPTION_pidfile: 2581 pid_file = optarg; 2582 break; 2583#ifdef TARGET_I386 2584 case QEMU_OPTION_win2k_hack: 2585 win2k_install_hack = 1; 2586 break; 2587 case QEMU_OPTION_rtc_td_hack: 2588 rtc_td_hack = 1; 2589 break; 2590 case QEMU_OPTION_acpitable: 2591 if(acpi_table_add(optarg) < 0) { 2592 fprintf(stderr, "Wrong acpi table provided\n"); 2593 exit(1); 2594 } 2595 break; 2596 case QEMU_OPTION_smbios: 2597 if(smbios_entry_add(optarg) < 0) { 2598 fprintf(stderr, "Wrong smbios provided\n"); 2599 exit(1); 2600 } 2601 break; 2602#endif 2603#ifdef CONFIG_KQEMU 2604 case QEMU_OPTION_no_kqemu: 2605 kqemu_allowed = 0; 2606 break; 2607 case QEMU_OPTION_kernel_kqemu: 2608 kqemu_allowed = 2; 2609 break; 2610#endif 2611#ifdef CONFIG_KVM 2612 case QEMU_OPTION_enable_kvm: 2613 kvm_allowed = 1; 2614#ifdef CONFIG_KQEMU 2615 kqemu_allowed = 0; 2616#endif 2617 break; 2618#endif 2619 case QEMU_OPTION_usb: 2620 usb_enabled = 1; 2621 break; 2622 case QEMU_OPTION_usbdevice: 2623 usb_enabled = 1; 2624 if (usb_devices_index >= MAX_USB_CMDLINE) { 2625 fprintf(stderr, "Too many USB devices\n"); 2626 exit(1); 2627 } 2628 usb_devices[usb_devices_index] = optarg; 2629 usb_devices_index++; 2630 break; 2631 case QEMU_OPTION_smp: 2632 smp_cpus = atoi(optarg); 2633 if (smp_cpus < 1) { 2634 fprintf(stderr, "Invalid number of CPUs\n"); 2635 exit(1); 2636 } 2637 break; 2638 case QEMU_OPTION_vnc: 2639 display_type = DT_VNC; 2640 vnc_display = optarg; 2641 break; 2642#ifdef TARGET_I386 2643 case QEMU_OPTION_no_acpi: 2644 acpi_enabled = 0; 2645 break; 2646 case QEMU_OPTION_no_hpet: 2647 no_hpet = 1; 2648 break; 2649 case QEMU_OPTION_no_virtio_balloon: 2650 no_virtio_balloon = 1; 2651 break; 2652#endif 2653 case QEMU_OPTION_no_reboot: 2654 no_reboot = 1; 2655 break; 2656 case QEMU_OPTION_no_shutdown: 2657 no_shutdown = 1; 2658 break; 2659 case QEMU_OPTION_show_cursor: 2660 cursor_hide = 0; 2661 break; 2662 case QEMU_OPTION_uuid: 2663 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) { 2664 fprintf(stderr, "Fail to parse UUID string." 2665 " Wrong format.\n"); 2666 exit(1); 2667 } 2668 break; 2669 case QEMU_OPTION_option_rom: 2670 if (nb_option_roms >= MAX_OPTION_ROMS) { 2671 fprintf(stderr, "Too many option ROMs\n"); 2672 exit(1); 2673 } 2674 option_rom[nb_option_roms] = optarg; 2675 nb_option_roms++; 2676 break; 2677#if defined(TARGET_ARM) || defined(TARGET_M68K) 2678 case QEMU_OPTION_semihosting: 2679 semihosting_enabled = 1; 2680 break; 2681#endif 2682 case QEMU_OPTION_name: 2683 qemu_name = optarg; 2684 break; 2685#if defined(TARGET_SPARC) || defined(TARGET_PPC) 2686 case QEMU_OPTION_prom_env: 2687 if (nb_prom_envs >= MAX_PROM_ENVS) { 2688 fprintf(stderr, "Too many prom variables\n"); 2689 exit(1); 2690 } 2691 prom_envs[nb_prom_envs] = optarg; 2692 nb_prom_envs++; 2693 break; 2694#endif 2695#ifdef TARGET_ARM 2696 case QEMU_OPTION_old_param: 2697 old_param = 1; 2698 break; 2699#endif 2700 case QEMU_OPTION_clock: 2701 configure_alarms(optarg); 2702 break; 2703 case QEMU_OPTION_startdate: 2704 { 2705 struct tm tm; 2706 time_t rtc_start_date = 0; 2707 if (!strcmp(optarg, "now")) { 2708 rtc_date_offset = -1; 2709 } else { 2710 if (sscanf(optarg, "%d-%d-%dT%d:%d:%d", 2711 &tm.tm_year, 2712 &tm.tm_mon, 2713 &tm.tm_mday, 2714 &tm.tm_hour, 2715 &tm.tm_min, 2716 &tm.tm_sec) == 6) { 2717 /* OK */ 2718 } else if (sscanf(optarg, "%d-%d-%d", 2719 &tm.tm_year, 2720 &tm.tm_mon, 2721 &tm.tm_mday) == 3) { 2722 tm.tm_hour = 0; 2723 tm.tm_min = 0; 2724 tm.tm_sec = 0; 2725 } else { 2726 goto date_fail; 2727 } 2728 tm.tm_year -= 1900; 2729 tm.tm_mon--; 2730 rtc_start_date = mktimegm(&tm); 2731 if (rtc_start_date == -1) { 2732 date_fail: 2733 fprintf(stderr, "Invalid date format. Valid format are:\n" 2734 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n"); 2735 exit(1); 2736 } 2737 rtc_date_offset = time(NULL) - rtc_start_date; 2738 } 2739 } 2740 break; 2741 case QEMU_OPTION_tb_size: 2742 tb_size = strtol(optarg, NULL, 0); 2743 if (tb_size < 0) 2744 tb_size = 0; 2745 break; 2746 case QEMU_OPTION_icount: 2747 icount_option = optarg; 2748 break; 2749 case QEMU_OPTION_incoming: 2750 incoming = optarg; 2751 break; 2752#ifdef CONFIG_XEN 2753 case QEMU_OPTION_xen_domid: 2754 xen_domid = atoi(optarg); 2755 break; 2756 case QEMU_OPTION_xen_create: 2757 xen_mode = XEN_CREATE; 2758 break; 2759 case QEMU_OPTION_xen_attach: 2760 xen_mode = XEN_ATTACH; 2761 break; 2762#endif 2763 } 2764 } 2765 } 2766 2767 /* If no data_dir is specified then try to find it relative to the 2768 executable path. */ 2769 if (!data_dir) { 2770 data_dir = find_datadir(argv[0]); 2771 } 2772 /* If all else fails use the install patch specified when building. */ 2773 if (!data_dir) { 2774 data_dir = CONFIG_QEMU_SHAREDIR; 2775 } 2776 2777 if (pid_file && qemu_create_pidfile(pid_file) != 0) { 2778 os_pidfile_error(); 2779 exit(1); 2780 } 2781 2782#if defined(CONFIG_KVM) && defined(CONFIG_KQEMU) 2783 if (kvm_allowed && kqemu_allowed) { 2784 fprintf(stderr, 2785 "You can not enable both KVM and kqemu at the same time\n"); 2786 exit(1); 2787 } 2788#endif 2789 2790 machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */ 2791 if (smp_cpus > machine->max_cpus) { 2792 fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus " 2793 "supported by machine `%s' (%d)\n", smp_cpus, machine->name, 2794 machine->max_cpus); 2795 exit(1); 2796 } 2797 2798 if (display_type == DT_NOGRAPHIC) { 2799 if (serial_device_index == 0) 2800 serial_devices[0] = "stdio"; 2801 if (parallel_device_index == 0) 2802 parallel_devices[0] = "null"; 2803 if (strncmp(monitor_device, "vc", 2) == 0) 2804 monitor_device = "stdio"; 2805 } 2806 2807#ifdef CONFIG_KQEMU 2808 if (smp_cpus > 1) 2809 kqemu_allowed = 0; 2810#endif 2811 if (qemu_init_main_loop()) { 2812 fprintf(stderr, "qemu_init_main_loop failed\n"); 2813 exit(1); 2814 } 2815 linux_boot = (kernel_filename != NULL); 2816 net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF; 2817 2818 if (!linux_boot && *kernel_cmdline != '\0') { 2819 fprintf(stderr, "-append only allowed with -kernel option\n"); 2820 exit(1); 2821 } 2822 2823 if (!linux_boot && initrd_filename != NULL) { 2824 fprintf(stderr, "-initrd only allowed with -kernel option\n"); 2825 exit(1); 2826 } 2827 2828 /* boot to floppy or the default cd if no hard disk defined yet */ 2829 if (!boot_devices[0]) { 2830 boot_devices = "cad"; 2831 } 2832 os_set_line_buffering(); 2833 2834 if (init_timer_alarm() < 0) { 2835 fprintf(stderr, "could not initialize alarm timer\n"); 2836 exit(1); 2837 } 2838 configure_icount(icount_option); 2839 2840#ifdef _WIN32 2841 socket_init(); 2842#endif 2843 2844 /* init network clients */ 2845 if (nb_net_clients == 0) { 2846 /* if no clients, we use a default config */ 2847 net_clients[nb_net_clients++] = "nic"; 2848#ifdef CONFIG_SLIRP 2849 net_clients[nb_net_clients++] = "user"; 2850#endif 2851 } 2852 2853 for(i = 0;i < nb_net_clients; i++) { 2854 if (net_client_parse(net_clients[i]) < 0) 2855 exit(1); 2856 } 2857 net_client_check(); 2858 2859#ifdef TARGET_I386 2860 /* XXX: this should be moved in the PC machine instantiation code */ 2861 if (net_boot != 0) { 2862 int netroms = 0; 2863 for (i = 0; i < nb_nics && i < 4; i++) { 2864 const char *model = nd_table[i].model; 2865 char buf[1024]; 2866 char *filename; 2867 if (net_boot & (1 << i)) { 2868 if (model == NULL) 2869 model = "ne2k_pci"; 2870 snprintf(buf, sizeof(buf), "pxe-%s.bin", model); 2871 filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, buf); 2872 if (filename && get_image_size(filename) > 0) { 2873 if (nb_option_roms >= MAX_OPTION_ROMS) { 2874 fprintf(stderr, "Too many option ROMs\n"); 2875 exit(1); 2876 } 2877 option_rom[nb_option_roms] = qemu_strdup(buf); 2878 nb_option_roms++; 2879 netroms++; 2880 } 2881 if (filename) { 2882 qemu_free(filename); 2883 } 2884 } 2885 } 2886 if (netroms == 0) { 2887 fprintf(stderr, "No valid PXE rom found for network device\n"); 2888 exit(1); 2889 } 2890 } 2891#endif 2892 2893 /* init the bluetooth world */ 2894 for (i = 0; i < nb_bt_opts; i++) 2895 if (bt_parse(bt_opts[i])) 2896 exit(1); 2897 2898 /* init the memory */ 2899 if (ram_size == 0) 2900 ram_size = DEFAULT_RAM_SIZE * 1024 * 1024; 2901 2902#ifdef CONFIG_KQEMU 2903 /* FIXME: This is a nasty hack because kqemu can't cope with dynamic 2904 guest ram allocation. It needs to go away. */ 2905 if (kqemu_allowed) { 2906 kqemu_phys_ram_size = ram_size + 8 * 1024 * 1024 + 4 * 1024 * 1024; 2907 kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size); 2908 if (!kqemu_phys_ram_base) { 2909 fprintf(stderr, "Could not allocate physical memory\n"); 2910 exit(1); 2911 } 2912 } 2913#endif 2914 2915 /* init the dynamic translator */ 2916 cpu_exec_init_all(tb_size * 1024 * 1024); 2917 2918 bdrv_init(); 2919 2920 /* we always create the cdrom drive, even if no disk is there */ 2921 2922 if (nb_drives_opt < MAX_DRIVES) 2923 drive_add(NULL, CDROM_ALIAS); 2924 2925 /* we always create at least one floppy */ 2926 2927 if (nb_drives_opt < MAX_DRIVES) 2928 drive_add(NULL, FD_ALIAS, 0); 2929 2930 /* we always create one sd slot, even if no card is in it */ 2931 2932 if (nb_drives_opt < MAX_DRIVES) { 2933 drive_add(NULL, SD_ALIAS); 2934 } 2935 2936 /* open the virtual block devices */ 2937 if (snapshot) 2938 qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot, NULL, 0); 2939 if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func, &machine->use_scsi, 1) != 0) 2940 exit(1); 2941 2942 //register_savevm("timer", 0, 2, timer_save, timer_load, NULL); 2943 register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL); 2944 2945 /* must be after terminal init, SDL library changes signal handlers */ 2946 os_setup_signal_handling(); 2947 2948 /* Maintain compatibility with multiple stdio monitors */ 2949 if (!strcmp(monitor_device,"stdio")) { 2950 for (i = 0; i < MAX_SERIAL_PORTS; i++) { 2951 const char *devname = serial_devices[i]; 2952 if (devname && !strcmp(devname,"mon:stdio")) { 2953 monitor_device = NULL; 2954 break; 2955 } else if (devname && !strcmp(devname,"stdio")) { 2956 monitor_device = NULL; 2957 serial_devices[i] = "mon:stdio"; 2958 break; 2959 } 2960 } 2961 } 2962 2963 if (nb_numa_nodes > 0) { 2964 int i; 2965 2966 if (nb_numa_nodes > smp_cpus) { 2967 nb_numa_nodes = smp_cpus; 2968 } 2969 2970 /* If no memory size if given for any node, assume the default case 2971 * and distribute the available memory equally across all nodes 2972 */ 2973 for (i = 0; i < nb_numa_nodes; i++) { 2974 if (node_mem[i] != 0) 2975 break; 2976 } 2977 if (i == nb_numa_nodes) { 2978 uint64_t usedmem = 0; 2979 2980 /* On Linux, the each node's border has to be 8MB aligned, 2981 * the final node gets the rest. 2982 */ 2983 for (i = 0; i < nb_numa_nodes - 1; i++) { 2984 node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1); 2985 usedmem += node_mem[i]; 2986 } 2987 node_mem[i] = ram_size - usedmem; 2988 } 2989 2990 for (i = 0; i < nb_numa_nodes; i++) { 2991 if (node_cpumask[i] != 0) 2992 break; 2993 } 2994 /* assigning the VCPUs round-robin is easier to implement, guest OSes 2995 * must cope with this anyway, because there are BIOSes out there in 2996 * real machines which also use this scheme. 2997 */ 2998 if (i == nb_numa_nodes) { 2999 for (i = 0; i < smp_cpus; i++) { 3000 node_cpumask[i % nb_numa_nodes] |= 1 << i; 3001 } 3002 } 3003 } 3004 3005 if (kvm_enabled()) { 3006 int ret; 3007 3008 ret = kvm_init(smp_cpus); 3009 if (ret < 0) { 3010 fprintf(stderr, "failed to initialize KVM\n"); 3011 exit(1); 3012 } 3013 } 3014 3015 if (monitor_device) { 3016 monitor_hd = qemu_chr_open("monitor", monitor_device, NULL); 3017 if (!monitor_hd) { 3018 fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device); 3019 exit(1); 3020 } 3021 } 3022 3023 for(i = 0; i < MAX_SERIAL_PORTS; i++) { 3024 const char *devname = serial_devices[i]; 3025 if (devname && strcmp(devname, "none")) { 3026 char label[32]; 3027 snprintf(label, sizeof(label), "serial%d", i); 3028 serial_hds[i] = qemu_chr_open(label, devname, NULL); 3029 if (!serial_hds[i]) { 3030 fprintf(stderr, "qemu: could not open serial device '%s'\n", 3031 devname); 3032 exit(1); 3033 } 3034 } 3035 } 3036 3037 for(i = 0; i < MAX_PARALLEL_PORTS; i++) { 3038 const char *devname = parallel_devices[i]; 3039 if (devname && strcmp(devname, "none")) { 3040 char label[32]; 3041 snprintf(label, sizeof(label), "parallel%d", i); 3042 parallel_hds[i] = qemu_chr_open(label, devname, NULL); 3043 if (!parallel_hds[i]) { 3044 fprintf(stderr, "qemu: could not open parallel device '%s'\n", 3045 devname); 3046 exit(1); 3047 } 3048 } 3049 } 3050 3051 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) { 3052 const char *devname = virtio_consoles[i]; 3053 if (devname && strcmp(devname, "none")) { 3054 char label[32]; 3055 snprintf(label, sizeof(label), "virtcon%d", i); 3056 virtcon_hds[i] = qemu_chr_open(label, devname, NULL); 3057 if (!virtcon_hds[i]) { 3058 fprintf(stderr, "qemu: could not open virtio console '%s'\n", 3059 devname); 3060 exit(1); 3061 } 3062 } 3063 } 3064 3065 module_call_init(MODULE_INIT_DEVICE); 3066 3067 machine->init(ram_size, boot_devices, 3068 kernel_filename, kernel_cmdline, initrd_filename, cpu_model); 3069 3070 3071 for (env = first_cpu; env != NULL; env = env->next_cpu) { 3072 for (i = 0; i < nb_numa_nodes; i++) { 3073 if (node_cpumask[i] & (1 << env->cpu_index)) { 3074 env->numa_node = i; 3075 } 3076 } 3077 } 3078 3079 current_machine = machine; 3080 3081 /* Set KVM's vcpu state to qemu's initial CPUState. */ 3082 if (kvm_enabled()) { 3083 int ret; 3084 3085 ret = kvm_sync_vcpus(); 3086 if (ret < 0) { 3087 fprintf(stderr, "failed to initialize vcpus\n"); 3088 exit(1); 3089 } 3090 } 3091 3092 /* init USB devices */ 3093 if (usb_enabled) { 3094 for(i = 0; i < usb_devices_index; i++) { 3095 if (usb_device_add(usb_devices[i], 0) < 0) { 3096 fprintf(stderr, "Warning: could not add USB device %s\n", 3097 usb_devices[i]); 3098 } 3099 } 3100 } 3101 3102 if (!display_state) 3103 dumb_display_init(); 3104 /* just use the first displaystate for the moment */ 3105 ds = display_state; 3106 3107 if (display_type == DT_DEFAULT) { 3108#if defined(CONFIG_SDL) || defined(CONFIG_COCOA) 3109 display_type = DT_SDL; 3110#else 3111 display_type = DT_VNC; 3112 vnc_display = "localhost:0,to=99"; 3113 show_vnc_port = 1; 3114#endif 3115 } 3116 3117 3118 switch (display_type) { 3119 case DT_NOGRAPHIC: 3120 break; 3121#if defined(CONFIG_CURSES) 3122 case DT_CURSES: 3123 curses_display_init(ds, full_screen); 3124 break; 3125#endif 3126#if defined(CONFIG_SDL) 3127 case DT_SDL: 3128 sdl_display_init(ds, full_screen, no_frame); 3129 break; 3130#elif defined(CONFIG_COCOA) 3131 case DT_SDL: 3132 cocoa_display_init(ds, full_screen); 3133 break; 3134#endif 3135 case DT_VNC: 3136 vnc_display_init(ds); 3137 if (vnc_display_open(ds, vnc_display) < 0) 3138 exit(1); 3139 3140 if (show_vnc_port) { 3141 printf("VNC server running on `%s'\n", vnc_display_local_addr(ds)); 3142 } 3143 break; 3144 default: 3145 break; 3146 } 3147 dpy_resize(ds); 3148 3149 dcl = ds->listeners; 3150 while (dcl != NULL) { 3151 if (dcl->dpy_refresh != NULL) { 3152 ds->gui_timer = qemu_new_timer_ms(rt_clock, gui_update, ds); 3153 qemu_mod_timer(ds->gui_timer, qemu_get_clock_ms(rt_clock)); 3154 } 3155 dcl = dcl->next; 3156 } 3157 3158 if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) { 3159 nographic_timer = qemu_new_timer_ms(rt_clock, nographic_update, NULL); 3160 qemu_mod_timer(nographic_timer, qemu_get_clock_ms(rt_clock)); 3161 } 3162 3163 text_consoles_set_display(display_state); 3164 qemu_chr_initial_reset(); 3165 3166 if (monitor_device && monitor_hd) 3167 monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT); 3168 3169 for(i = 0; i < MAX_SERIAL_PORTS; i++) { 3170 const char *devname = serial_devices[i]; 3171 if (devname && strcmp(devname, "none")) { 3172 if (strstart(devname, "vc", 0)) 3173 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i); 3174 } 3175 } 3176 3177 for(i = 0; i < MAX_PARALLEL_PORTS; i++) { 3178 const char *devname = parallel_devices[i]; 3179 if (devname && strcmp(devname, "none")) { 3180 if (strstart(devname, "vc", 0)) 3181 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i); 3182 } 3183 } 3184 3185 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) { 3186 const char *devname = virtio_consoles[i]; 3187 if (virtcon_hds[i] && devname) { 3188 if (strstart(devname, "vc", 0)) 3189 qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i); 3190 } 3191 } 3192 3193 if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) { 3194 fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n", 3195 gdbstub_dev); 3196 exit(1); 3197 } 3198 3199 if (loadvm) 3200 do_loadvm(cur_mon, loadvm); 3201 3202 if (incoming) { 3203 autostart = 0; /* fixme how to deal with -daemonize */ 3204 qemu_start_incoming_migration(incoming); 3205 } 3206 3207 if (autostart) 3208 vm_start(); 3209 3210 os_setup_post(); 3211 3212 main_loop(); 3213 quit_timers(); 3214 net_cleanup(); 3215 3216 return 0; 3217} 3218