]> git.proxmox.com Git - qemu.git/blob - vl.c
Fix typo, thanks to Andreas Faerber for spotting
[qemu.git] / vl.c
1 /*
2 * QEMU System Emulator
3 *
4 * Copyright (c) 2003-2008 Fabrice Bellard
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24 #include <unistd.h>
25 #include <fcntl.h>
26 #include <signal.h>
27 #include <time.h>
28 #include <errno.h>
29 #include <sys/time.h>
30 #include <zlib.h>
31
32 /* Needed early for HOST_BSD etc. */
33 #include "config-host.h"
34
35 #ifndef _WIN32
36 #include <pwd.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 HOST_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 #ifdef CONFIG_SDL
115 #ifdef __APPLE__
116 #include <SDL/SDL.h>
117 int qemu_main(int argc, char **argv, char **envp);
118 int main(int argc, char **argv)
119 {
120 qemu_main(argc, argv, NULL);
121 }
122 #undef main
123 #define main qemu_main
124 #endif
125 #endif /* CONFIG_SDL */
126
127 #ifdef CONFIG_COCOA
128 #undef main
129 #define main qemu_main
130 #endif /* CONFIG_COCOA */
131
132 #include "hw/hw.h"
133 #include "hw/boards.h"
134 #include "hw/usb.h"
135 #include "hw/pcmcia.h"
136 #include "hw/pc.h"
137 #include "hw/audiodev.h"
138 #include "hw/isa.h"
139 #include "hw/baum.h"
140 #include "hw/bt.h"
141 #include "hw/smbios.h"
142 #include "hw/xen.h"
143 #include "bt-host.h"
144 #include "net.h"
145 #include "monitor.h"
146 #include "console.h"
147 #include "sysemu.h"
148 #include "gdbstub.h"
149 #include "qemu-timer.h"
150 #include "qemu-char.h"
151 #include "cache-utils.h"
152 #include "block.h"
153 #include "dma.h"
154 #include "audio/audio.h"
155 #include "migration.h"
156 #include "kvm.h"
157 #include "balloon.h"
158
159 #include "disas.h"
160
161 #include "exec-all.h"
162
163 #include "qemu_socket.h"
164
165 #if defined(CONFIG_SLIRP)
166 #include "libslirp.h"
167 #endif
168
169 //#define DEBUG_UNUSED_IOPORT
170 //#define DEBUG_IOPORT
171 //#define DEBUG_NET
172 //#define DEBUG_SLIRP
173
174
175 #ifdef DEBUG_IOPORT
176 # define LOG_IOPORT(...) qemu_log_mask(CPU_LOG_IOPORT, ## __VA_ARGS__)
177 #else
178 # define LOG_IOPORT(...) do { } while (0)
179 #endif
180
181 #define DEFAULT_RAM_SIZE 128
182
183 /* Max number of USB devices that can be specified on the commandline. */
184 #define MAX_USB_CMDLINE 8
185
186 /* Max number of bluetooth switches on the commandline. */
187 #define MAX_BT_CMDLINE 10
188
189 /* XXX: use a two level table to limit memory usage */
190 #define MAX_IOPORTS 65536
191
192 const char *bios_dir = CONFIG_QEMU_SHAREDIR;
193 const char *bios_name = NULL;
194 static void *ioport_opaque[MAX_IOPORTS];
195 static IOPortReadFunc *ioport_read_table[3][MAX_IOPORTS];
196 static IOPortWriteFunc *ioport_write_table[3][MAX_IOPORTS];
197 /* Note: drives_table[MAX_DRIVES] is a dummy block driver if none available
198 to store the VM snapshots */
199 DriveInfo drives_table[MAX_DRIVES+1];
200 int nb_drives;
201 static int vga_ram_size;
202 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
203 static DisplayState *display_state;
204 int nographic;
205 static int curses;
206 static int sdl;
207 const char* keyboard_layout = NULL;
208 int64_t ticks_per_sec;
209 ram_addr_t ram_size;
210 int nb_nics;
211 NICInfo nd_table[MAX_NICS];
212 int vm_running;
213 static int autostart;
214 static int rtc_utc = 1;
215 static int rtc_date_offset = -1; /* -1 means no change */
216 int cirrus_vga_enabled = 1;
217 int std_vga_enabled = 0;
218 int vmsvga_enabled = 0;
219 int xenfb_enabled = 0;
220 #ifdef TARGET_SPARC
221 int graphic_width = 1024;
222 int graphic_height = 768;
223 int graphic_depth = 8;
224 #else
225 int graphic_width = 800;
226 int graphic_height = 600;
227 int graphic_depth = 15;
228 #endif
229 static int full_screen = 0;
230 #ifdef CONFIG_SDL
231 static int no_frame = 0;
232 #endif
233 int no_quit = 0;
234 CharDriverState *serial_hds[MAX_SERIAL_PORTS];
235 CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
236 CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
237 #ifdef TARGET_I386
238 int win2k_install_hack = 0;
239 int rtc_td_hack = 0;
240 #endif
241 int usb_enabled = 0;
242 int singlestep = 0;
243 int smp_cpus = 1;
244 const char *vnc_display;
245 int acpi_enabled = 1;
246 int no_hpet = 0;
247 int fd_bootchk = 1;
248 int no_reboot = 0;
249 int no_shutdown = 0;
250 int cursor_hide = 1;
251 int graphic_rotate = 0;
252 #ifndef _WIN32
253 int daemonize = 0;
254 #endif
255 const char *option_rom[MAX_OPTION_ROMS];
256 int nb_option_roms;
257 int semihosting_enabled = 0;
258 #ifdef TARGET_ARM
259 int old_param = 0;
260 #endif
261 const char *qemu_name;
262 int alt_grab = 0;
263 #if defined(TARGET_SPARC) || defined(TARGET_PPC)
264 unsigned int nb_prom_envs = 0;
265 const char *prom_envs[MAX_PROM_ENVS];
266 #endif
267 int nb_drives_opt;
268 struct drive_opt drives_opt[MAX_DRIVES];
269
270 int nb_numa_nodes;
271 uint64_t node_mem[MAX_NODES];
272 uint64_t node_cpumask[MAX_NODES];
273
274 static CPUState *cur_cpu;
275 static CPUState *next_cpu;
276 static int event_pending = 1;
277 /* Conversion factor from emulated instructions to virtual clock ticks. */
278 static int icount_time_shift;
279 /* Arbitrarily pick 1MIPS as the minimum allowable speed. */
280 #define MAX_ICOUNT_SHIFT 10
281 /* Compensate for varying guest execution speed. */
282 static int64_t qemu_icount_bias;
283 static QEMUTimer *icount_rt_timer;
284 static QEMUTimer *icount_vm_timer;
285 static QEMUTimer *nographic_timer;
286
287 uint8_t qemu_uuid[16];
288
289 /***********************************************************/
290 /* x86 ISA bus support */
291
292 target_phys_addr_t isa_mem_base = 0;
293 PicState2 *isa_pic;
294
295 static IOPortReadFunc default_ioport_readb, default_ioport_readw, default_ioport_readl;
296 static IOPortWriteFunc default_ioport_writeb, default_ioport_writew, default_ioport_writel;
297
298 static uint32_t ioport_read(int index, uint32_t address)
299 {
300 static IOPortReadFunc *default_func[3] = {
301 default_ioport_readb,
302 default_ioport_readw,
303 default_ioport_readl
304 };
305 IOPortReadFunc *func = ioport_read_table[index][address];
306 if (!func)
307 func = default_func[index];
308 return func(ioport_opaque[address], address);
309 }
310
311 static void ioport_write(int index, uint32_t address, uint32_t data)
312 {
313 static IOPortWriteFunc *default_func[3] = {
314 default_ioport_writeb,
315 default_ioport_writew,
316 default_ioport_writel
317 };
318 IOPortWriteFunc *func = ioport_write_table[index][address];
319 if (!func)
320 func = default_func[index];
321 func(ioport_opaque[address], address, data);
322 }
323
324 static uint32_t default_ioport_readb(void *opaque, uint32_t address)
325 {
326 #ifdef DEBUG_UNUSED_IOPORT
327 fprintf(stderr, "unused inb: port=0x%04x\n", address);
328 #endif
329 return 0xff;
330 }
331
332 static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
333 {
334 #ifdef DEBUG_UNUSED_IOPORT
335 fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
336 #endif
337 }
338
339 /* default is to make two byte accesses */
340 static uint32_t default_ioport_readw(void *opaque, uint32_t address)
341 {
342 uint32_t data;
343 data = ioport_read(0, address);
344 address = (address + 1) & (MAX_IOPORTS - 1);
345 data |= ioport_read(0, address) << 8;
346 return data;
347 }
348
349 static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
350 {
351 ioport_write(0, address, data & 0xff);
352 address = (address + 1) & (MAX_IOPORTS - 1);
353 ioport_write(0, address, (data >> 8) & 0xff);
354 }
355
356 static uint32_t default_ioport_readl(void *opaque, uint32_t address)
357 {
358 #ifdef DEBUG_UNUSED_IOPORT
359 fprintf(stderr, "unused inl: port=0x%04x\n", address);
360 #endif
361 return 0xffffffff;
362 }
363
364 static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
365 {
366 #ifdef DEBUG_UNUSED_IOPORT
367 fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
368 #endif
369 }
370
371 /* size is the word size in byte */
372 int register_ioport_read(int start, int length, int size,
373 IOPortReadFunc *func, void *opaque)
374 {
375 int i, bsize;
376
377 if (size == 1) {
378 bsize = 0;
379 } else if (size == 2) {
380 bsize = 1;
381 } else if (size == 4) {
382 bsize = 2;
383 } else {
384 hw_error("register_ioport_read: invalid size");
385 return -1;
386 }
387 for(i = start; i < start + length; i += size) {
388 ioport_read_table[bsize][i] = func;
389 if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
390 hw_error("register_ioport_read: invalid opaque");
391 ioport_opaque[i] = opaque;
392 }
393 return 0;
394 }
395
396 /* size is the word size in byte */
397 int register_ioport_write(int start, int length, int size,
398 IOPortWriteFunc *func, void *opaque)
399 {
400 int i, bsize;
401
402 if (size == 1) {
403 bsize = 0;
404 } else if (size == 2) {
405 bsize = 1;
406 } else if (size == 4) {
407 bsize = 2;
408 } else {
409 hw_error("register_ioport_write: invalid size");
410 return -1;
411 }
412 for(i = start; i < start + length; i += size) {
413 ioport_write_table[bsize][i] = func;
414 if (ioport_opaque[i] != NULL && ioport_opaque[i] != opaque)
415 hw_error("register_ioport_write: invalid opaque");
416 ioport_opaque[i] = opaque;
417 }
418 return 0;
419 }
420
421 void isa_unassign_ioport(int start, int length)
422 {
423 int i;
424
425 for(i = start; i < start + length; i++) {
426 ioport_read_table[0][i] = default_ioport_readb;
427 ioport_read_table[1][i] = default_ioport_readw;
428 ioport_read_table[2][i] = default_ioport_readl;
429
430 ioport_write_table[0][i] = default_ioport_writeb;
431 ioport_write_table[1][i] = default_ioport_writew;
432 ioport_write_table[2][i] = default_ioport_writel;
433
434 ioport_opaque[i] = NULL;
435 }
436 }
437
438 /***********************************************************/
439
440 void cpu_outb(CPUState *env, int addr, int val)
441 {
442 LOG_IOPORT("outb: %04x %02x\n", addr, val);
443 ioport_write(0, addr, val);
444 #ifdef CONFIG_KQEMU
445 if (env)
446 env->last_io_time = cpu_get_time_fast();
447 #endif
448 }
449
450 void cpu_outw(CPUState *env, int addr, int val)
451 {
452 LOG_IOPORT("outw: %04x %04x\n", addr, val);
453 ioport_write(1, addr, val);
454 #ifdef CONFIG_KQEMU
455 if (env)
456 env->last_io_time = cpu_get_time_fast();
457 #endif
458 }
459
460 void cpu_outl(CPUState *env, int addr, int val)
461 {
462 LOG_IOPORT("outl: %04x %08x\n", addr, val);
463 ioport_write(2, addr, val);
464 #ifdef CONFIG_KQEMU
465 if (env)
466 env->last_io_time = cpu_get_time_fast();
467 #endif
468 }
469
470 int cpu_inb(CPUState *env, int addr)
471 {
472 int val;
473 val = ioport_read(0, addr);
474 LOG_IOPORT("inb : %04x %02x\n", addr, val);
475 #ifdef CONFIG_KQEMU
476 if (env)
477 env->last_io_time = cpu_get_time_fast();
478 #endif
479 return val;
480 }
481
482 int cpu_inw(CPUState *env, int addr)
483 {
484 int val;
485 val = ioport_read(1, addr);
486 LOG_IOPORT("inw : %04x %04x\n", addr, val);
487 #ifdef CONFIG_KQEMU
488 if (env)
489 env->last_io_time = cpu_get_time_fast();
490 #endif
491 return val;
492 }
493
494 int cpu_inl(CPUState *env, int addr)
495 {
496 int val;
497 val = ioport_read(2, addr);
498 LOG_IOPORT("inl : %04x %08x\n", addr, val);
499 #ifdef CONFIG_KQEMU
500 if (env)
501 env->last_io_time = cpu_get_time_fast();
502 #endif
503 return val;
504 }
505
506 /***********************************************************/
507 void hw_error(const char *fmt, ...)
508 {
509 va_list ap;
510 CPUState *env;
511
512 va_start(ap, fmt);
513 fprintf(stderr, "qemu: hardware error: ");
514 vfprintf(stderr, fmt, ap);
515 fprintf(stderr, "\n");
516 for(env = first_cpu; env != NULL; env = env->next_cpu) {
517 fprintf(stderr, "CPU #%d:\n", env->cpu_index);
518 #ifdef TARGET_I386
519 cpu_dump_state(env, stderr, fprintf, X86_DUMP_FPU);
520 #else
521 cpu_dump_state(env, stderr, fprintf, 0);
522 #endif
523 }
524 va_end(ap);
525 abort();
526 }
527
528 /***************/
529 /* ballooning */
530
531 static QEMUBalloonEvent *qemu_balloon_event;
532 void *qemu_balloon_event_opaque;
533
534 void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
535 {
536 qemu_balloon_event = func;
537 qemu_balloon_event_opaque = opaque;
538 }
539
540 void qemu_balloon(ram_addr_t target)
541 {
542 if (qemu_balloon_event)
543 qemu_balloon_event(qemu_balloon_event_opaque, target);
544 }
545
546 ram_addr_t qemu_balloon_status(void)
547 {
548 if (qemu_balloon_event)
549 return qemu_balloon_event(qemu_balloon_event_opaque, 0);
550 return 0;
551 }
552
553 /***********************************************************/
554 /* keyboard/mouse */
555
556 static QEMUPutKBDEvent *qemu_put_kbd_event;
557 static void *qemu_put_kbd_event_opaque;
558 static QEMUPutMouseEntry *qemu_put_mouse_event_head;
559 static QEMUPutMouseEntry *qemu_put_mouse_event_current;
560
561 void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
562 {
563 qemu_put_kbd_event_opaque = opaque;
564 qemu_put_kbd_event = func;
565 }
566
567 QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
568 void *opaque, int absolute,
569 const char *name)
570 {
571 QEMUPutMouseEntry *s, *cursor;
572
573 s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
574
575 s->qemu_put_mouse_event = func;
576 s->qemu_put_mouse_event_opaque = opaque;
577 s->qemu_put_mouse_event_absolute = absolute;
578 s->qemu_put_mouse_event_name = qemu_strdup(name);
579 s->next = NULL;
580
581 if (!qemu_put_mouse_event_head) {
582 qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
583 return s;
584 }
585
586 cursor = qemu_put_mouse_event_head;
587 while (cursor->next != NULL)
588 cursor = cursor->next;
589
590 cursor->next = s;
591 qemu_put_mouse_event_current = s;
592
593 return s;
594 }
595
596 void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
597 {
598 QEMUPutMouseEntry *prev = NULL, *cursor;
599
600 if (!qemu_put_mouse_event_head || entry == NULL)
601 return;
602
603 cursor = qemu_put_mouse_event_head;
604 while (cursor != NULL && cursor != entry) {
605 prev = cursor;
606 cursor = cursor->next;
607 }
608
609 if (cursor == NULL) // does not exist or list empty
610 return;
611 else if (prev == NULL) { // entry is head
612 qemu_put_mouse_event_head = cursor->next;
613 if (qemu_put_mouse_event_current == entry)
614 qemu_put_mouse_event_current = cursor->next;
615 qemu_free(entry->qemu_put_mouse_event_name);
616 qemu_free(entry);
617 return;
618 }
619
620 prev->next = entry->next;
621
622 if (qemu_put_mouse_event_current == entry)
623 qemu_put_mouse_event_current = prev;
624
625 qemu_free(entry->qemu_put_mouse_event_name);
626 qemu_free(entry);
627 }
628
629 void kbd_put_keycode(int keycode)
630 {
631 if (qemu_put_kbd_event) {
632 qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
633 }
634 }
635
636 void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
637 {
638 QEMUPutMouseEvent *mouse_event;
639 void *mouse_event_opaque;
640 int width;
641
642 if (!qemu_put_mouse_event_current) {
643 return;
644 }
645
646 mouse_event =
647 qemu_put_mouse_event_current->qemu_put_mouse_event;
648 mouse_event_opaque =
649 qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
650
651 if (mouse_event) {
652 if (graphic_rotate) {
653 if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
654 width = 0x7fff;
655 else
656 width = graphic_width - 1;
657 mouse_event(mouse_event_opaque,
658 width - dy, dx, dz, buttons_state);
659 } else
660 mouse_event(mouse_event_opaque,
661 dx, dy, dz, buttons_state);
662 }
663 }
664
665 int kbd_mouse_is_absolute(void)
666 {
667 if (!qemu_put_mouse_event_current)
668 return 0;
669
670 return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
671 }
672
673 void do_info_mice(Monitor *mon)
674 {
675 QEMUPutMouseEntry *cursor;
676 int index = 0;
677
678 if (!qemu_put_mouse_event_head) {
679 monitor_printf(mon, "No mouse devices connected\n");
680 return;
681 }
682
683 monitor_printf(mon, "Mouse devices available:\n");
684 cursor = qemu_put_mouse_event_head;
685 while (cursor != NULL) {
686 monitor_printf(mon, "%c Mouse #%d: %s\n",
687 (cursor == qemu_put_mouse_event_current ? '*' : ' '),
688 index, cursor->qemu_put_mouse_event_name);
689 index++;
690 cursor = cursor->next;
691 }
692 }
693
694 void do_mouse_set(Monitor *mon, int index)
695 {
696 QEMUPutMouseEntry *cursor;
697 int i = 0;
698
699 if (!qemu_put_mouse_event_head) {
700 monitor_printf(mon, "No mouse devices connected\n");
701 return;
702 }
703
704 cursor = qemu_put_mouse_event_head;
705 while (cursor != NULL && index != i) {
706 i++;
707 cursor = cursor->next;
708 }
709
710 if (cursor != NULL)
711 qemu_put_mouse_event_current = cursor;
712 else
713 monitor_printf(mon, "Mouse at given index not found\n");
714 }
715
716 /* compute with 96 bit intermediate result: (a*b)/c */
717 uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
718 {
719 union {
720 uint64_t ll;
721 struct {
722 #ifdef WORDS_BIGENDIAN
723 uint32_t high, low;
724 #else
725 uint32_t low, high;
726 #endif
727 } l;
728 } u, res;
729 uint64_t rl, rh;
730
731 u.ll = a;
732 rl = (uint64_t)u.l.low * (uint64_t)b;
733 rh = (uint64_t)u.l.high * (uint64_t)b;
734 rh += (rl >> 32);
735 res.l.high = rh / c;
736 res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
737 return res.ll;
738 }
739
740 /***********************************************************/
741 /* real time host monotonic timer */
742
743 #define QEMU_TIMER_BASE 1000000000LL
744
745 #ifdef WIN32
746
747 static int64_t clock_freq;
748
749 static void init_get_clock(void)
750 {
751 LARGE_INTEGER freq;
752 int ret;
753 ret = QueryPerformanceFrequency(&freq);
754 if (ret == 0) {
755 fprintf(stderr, "Could not calibrate ticks\n");
756 exit(1);
757 }
758 clock_freq = freq.QuadPart;
759 }
760
761 static int64_t get_clock(void)
762 {
763 LARGE_INTEGER ti;
764 QueryPerformanceCounter(&ti);
765 return muldiv64(ti.QuadPart, QEMU_TIMER_BASE, clock_freq);
766 }
767
768 #else
769
770 static int use_rt_clock;
771
772 static void init_get_clock(void)
773 {
774 use_rt_clock = 0;
775 #if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
776 || defined(__DragonFly__)
777 {
778 struct timespec ts;
779 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
780 use_rt_clock = 1;
781 }
782 }
783 #endif
784 }
785
786 static int64_t get_clock(void)
787 {
788 #if defined(__linux__) || (defined(__FreeBSD__) && __FreeBSD_version >= 500000) \
789 || defined(__DragonFly__)
790 if (use_rt_clock) {
791 struct timespec ts;
792 clock_gettime(CLOCK_MONOTONIC, &ts);
793 return ts.tv_sec * 1000000000LL + ts.tv_nsec;
794 } else
795 #endif
796 {
797 /* XXX: using gettimeofday leads to problems if the date
798 changes, so it should be avoided. */
799 struct timeval tv;
800 gettimeofday(&tv, NULL);
801 return tv.tv_sec * 1000000000LL + (tv.tv_usec * 1000);
802 }
803 }
804 #endif
805
806 /* Return the virtual CPU time, based on the instruction counter. */
807 static int64_t cpu_get_icount(void)
808 {
809 int64_t icount;
810 CPUState *env = cpu_single_env;;
811 icount = qemu_icount;
812 if (env) {
813 if (!can_do_io(env))
814 fprintf(stderr, "Bad clock read\n");
815 icount -= (env->icount_decr.u16.low + env->icount_extra);
816 }
817 return qemu_icount_bias + (icount << icount_time_shift);
818 }
819
820 /***********************************************************/
821 /* guest cycle counter */
822
823 static int64_t cpu_ticks_prev;
824 static int64_t cpu_ticks_offset;
825 static int64_t cpu_clock_offset;
826 static int cpu_ticks_enabled;
827
828 /* return the host CPU cycle counter and handle stop/restart */
829 int64_t cpu_get_ticks(void)
830 {
831 if (use_icount) {
832 return cpu_get_icount();
833 }
834 if (!cpu_ticks_enabled) {
835 return cpu_ticks_offset;
836 } else {
837 int64_t ticks;
838 ticks = cpu_get_real_ticks();
839 if (cpu_ticks_prev > ticks) {
840 /* Note: non increasing ticks may happen if the host uses
841 software suspend */
842 cpu_ticks_offset += cpu_ticks_prev - ticks;
843 }
844 cpu_ticks_prev = ticks;
845 return ticks + cpu_ticks_offset;
846 }
847 }
848
849 /* return the host CPU monotonic timer and handle stop/restart */
850 static int64_t cpu_get_clock(void)
851 {
852 int64_t ti;
853 if (!cpu_ticks_enabled) {
854 return cpu_clock_offset;
855 } else {
856 ti = get_clock();
857 return ti + cpu_clock_offset;
858 }
859 }
860
861 /* enable cpu_get_ticks() */
862 void cpu_enable_ticks(void)
863 {
864 if (!cpu_ticks_enabled) {
865 cpu_ticks_offset -= cpu_get_real_ticks();
866 cpu_clock_offset -= get_clock();
867 cpu_ticks_enabled = 1;
868 }
869 }
870
871 /* disable cpu_get_ticks() : the clock is stopped. You must not call
872 cpu_get_ticks() after that. */
873 void cpu_disable_ticks(void)
874 {
875 if (cpu_ticks_enabled) {
876 cpu_ticks_offset = cpu_get_ticks();
877 cpu_clock_offset = cpu_get_clock();
878 cpu_ticks_enabled = 0;
879 }
880 }
881
882 /***********************************************************/
883 /* timers */
884
885 #define QEMU_TIMER_REALTIME 0
886 #define QEMU_TIMER_VIRTUAL 1
887
888 struct QEMUClock {
889 int type;
890 /* XXX: add frequency */
891 };
892
893 struct QEMUTimer {
894 QEMUClock *clock;
895 int64_t expire_time;
896 QEMUTimerCB *cb;
897 void *opaque;
898 struct QEMUTimer *next;
899 };
900
901 struct qemu_alarm_timer {
902 char const *name;
903 unsigned int flags;
904
905 int (*start)(struct qemu_alarm_timer *t);
906 void (*stop)(struct qemu_alarm_timer *t);
907 void (*rearm)(struct qemu_alarm_timer *t);
908 void *priv;
909 };
910
911 #define ALARM_FLAG_DYNTICKS 0x1
912 #define ALARM_FLAG_EXPIRED 0x2
913
914 static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
915 {
916 return t->flags & ALARM_FLAG_DYNTICKS;
917 }
918
919 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
920 {
921 if (!alarm_has_dynticks(t))
922 return;
923
924 t->rearm(t);
925 }
926
927 /* TODO: MIN_TIMER_REARM_US should be optimized */
928 #define MIN_TIMER_REARM_US 250
929
930 static struct qemu_alarm_timer *alarm_timer;
931 #ifndef _WIN32
932 static int alarm_timer_rfd, alarm_timer_wfd;
933 #endif
934
935 #ifdef _WIN32
936
937 struct qemu_alarm_win32 {
938 MMRESULT timerId;
939 HANDLE host_alarm;
940 unsigned int period;
941 } alarm_win32_data = {0, NULL, -1};
942
943 static int win32_start_timer(struct qemu_alarm_timer *t);
944 static void win32_stop_timer(struct qemu_alarm_timer *t);
945 static void win32_rearm_timer(struct qemu_alarm_timer *t);
946
947 #else
948
949 static int unix_start_timer(struct qemu_alarm_timer *t);
950 static void unix_stop_timer(struct qemu_alarm_timer *t);
951
952 #ifdef __linux__
953
954 static int dynticks_start_timer(struct qemu_alarm_timer *t);
955 static void dynticks_stop_timer(struct qemu_alarm_timer *t);
956 static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
957
958 static int hpet_start_timer(struct qemu_alarm_timer *t);
959 static void hpet_stop_timer(struct qemu_alarm_timer *t);
960
961 static int rtc_start_timer(struct qemu_alarm_timer *t);
962 static void rtc_stop_timer(struct qemu_alarm_timer *t);
963
964 #endif /* __linux__ */
965
966 #endif /* _WIN32 */
967
968 /* Correlation between real and virtual time is always going to be
969 fairly approximate, so ignore small variation.
970 When the guest is idle real and virtual time will be aligned in
971 the IO wait loop. */
972 #define ICOUNT_WOBBLE (QEMU_TIMER_BASE / 10)
973
974 static void icount_adjust(void)
975 {
976 int64_t cur_time;
977 int64_t cur_icount;
978 int64_t delta;
979 static int64_t last_delta;
980 /* If the VM is not running, then do nothing. */
981 if (!vm_running)
982 return;
983
984 cur_time = cpu_get_clock();
985 cur_icount = qemu_get_clock(vm_clock);
986 delta = cur_icount - cur_time;
987 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
988 if (delta > 0
989 && last_delta + ICOUNT_WOBBLE < delta * 2
990 && icount_time_shift > 0) {
991 /* The guest is getting too far ahead. Slow time down. */
992 icount_time_shift--;
993 }
994 if (delta < 0
995 && last_delta - ICOUNT_WOBBLE > delta * 2
996 && icount_time_shift < MAX_ICOUNT_SHIFT) {
997 /* The guest is getting too far behind. Speed time up. */
998 icount_time_shift++;
999 }
1000 last_delta = delta;
1001 qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
1002 }
1003
1004 static void icount_adjust_rt(void * opaque)
1005 {
1006 qemu_mod_timer(icount_rt_timer,
1007 qemu_get_clock(rt_clock) + 1000);
1008 icount_adjust();
1009 }
1010
1011 static void icount_adjust_vm(void * opaque)
1012 {
1013 qemu_mod_timer(icount_vm_timer,
1014 qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1015 icount_adjust();
1016 }
1017
1018 static void init_icount_adjust(void)
1019 {
1020 /* Have both realtime and virtual time triggers for speed adjustment.
1021 The realtime trigger catches emulated time passing too slowly,
1022 the virtual time trigger catches emulated time passing too fast.
1023 Realtime triggers occur even when idle, so use them less frequently
1024 than VM triggers. */
1025 icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
1026 qemu_mod_timer(icount_rt_timer,
1027 qemu_get_clock(rt_clock) + 1000);
1028 icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
1029 qemu_mod_timer(icount_vm_timer,
1030 qemu_get_clock(vm_clock) + QEMU_TIMER_BASE / 10);
1031 }
1032
1033 static struct qemu_alarm_timer alarm_timers[] = {
1034 #ifndef _WIN32
1035 #ifdef __linux__
1036 {"dynticks", ALARM_FLAG_DYNTICKS, dynticks_start_timer,
1037 dynticks_stop_timer, dynticks_rearm_timer, NULL},
1038 /* HPET - if available - is preferred */
1039 {"hpet", 0, hpet_start_timer, hpet_stop_timer, NULL, NULL},
1040 /* ...otherwise try RTC */
1041 {"rtc", 0, rtc_start_timer, rtc_stop_timer, NULL, NULL},
1042 #endif
1043 {"unix", 0, unix_start_timer, unix_stop_timer, NULL, NULL},
1044 #else
1045 {"dynticks", ALARM_FLAG_DYNTICKS, win32_start_timer,
1046 win32_stop_timer, win32_rearm_timer, &alarm_win32_data},
1047 {"win32", 0, win32_start_timer,
1048 win32_stop_timer, NULL, &alarm_win32_data},
1049 #endif
1050 {NULL, }
1051 };
1052
1053 static void show_available_alarms(void)
1054 {
1055 int i;
1056
1057 printf("Available alarm timers, in order of precedence:\n");
1058 for (i = 0; alarm_timers[i].name; i++)
1059 printf("%s\n", alarm_timers[i].name);
1060 }
1061
1062 static void configure_alarms(char const *opt)
1063 {
1064 int i;
1065 int cur = 0;
1066 int count = ARRAY_SIZE(alarm_timers) - 1;
1067 char *arg;
1068 char *name;
1069 struct qemu_alarm_timer tmp;
1070
1071 if (!strcmp(opt, "?")) {
1072 show_available_alarms();
1073 exit(0);
1074 }
1075
1076 arg = strdup(opt);
1077
1078 /* Reorder the array */
1079 name = strtok(arg, ",");
1080 while (name) {
1081 for (i = 0; i < count && alarm_timers[i].name; i++) {
1082 if (!strcmp(alarm_timers[i].name, name))
1083 break;
1084 }
1085
1086 if (i == count) {
1087 fprintf(stderr, "Unknown clock %s\n", name);
1088 goto next;
1089 }
1090
1091 if (i < cur)
1092 /* Ignore */
1093 goto next;
1094
1095 /* Swap */
1096 tmp = alarm_timers[i];
1097 alarm_timers[i] = alarm_timers[cur];
1098 alarm_timers[cur] = tmp;
1099
1100 cur++;
1101 next:
1102 name = strtok(NULL, ",");
1103 }
1104
1105 free(arg);
1106
1107 if (cur) {
1108 /* Disable remaining timers */
1109 for (i = cur; i < count; i++)
1110 alarm_timers[i].name = NULL;
1111 } else {
1112 show_available_alarms();
1113 exit(1);
1114 }
1115 }
1116
1117 QEMUClock *rt_clock;
1118 QEMUClock *vm_clock;
1119
1120 static QEMUTimer *active_timers[2];
1121
1122 static QEMUClock *qemu_new_clock(int type)
1123 {
1124 QEMUClock *clock;
1125 clock = qemu_mallocz(sizeof(QEMUClock));
1126 clock->type = type;
1127 return clock;
1128 }
1129
1130 QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque)
1131 {
1132 QEMUTimer *ts;
1133
1134 ts = qemu_mallocz(sizeof(QEMUTimer));
1135 ts->clock = clock;
1136 ts->cb = cb;
1137 ts->opaque = opaque;
1138 return ts;
1139 }
1140
1141 void qemu_free_timer(QEMUTimer *ts)
1142 {
1143 qemu_free(ts);
1144 }
1145
1146 /* stop a timer, but do not dealloc it */
1147 void qemu_del_timer(QEMUTimer *ts)
1148 {
1149 QEMUTimer **pt, *t;
1150
1151 /* NOTE: this code must be signal safe because
1152 qemu_timer_expired() can be called from a signal. */
1153 pt = &active_timers[ts->clock->type];
1154 for(;;) {
1155 t = *pt;
1156 if (!t)
1157 break;
1158 if (t == ts) {
1159 *pt = t->next;
1160 break;
1161 }
1162 pt = &t->next;
1163 }
1164 }
1165
1166 /* modify the current timer so that it will be fired when current_time
1167 >= expire_time. The corresponding callback will be called. */
1168 void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
1169 {
1170 QEMUTimer **pt, *t;
1171
1172 qemu_del_timer(ts);
1173
1174 /* add the timer in the sorted list */
1175 /* NOTE: this code must be signal safe because
1176 qemu_timer_expired() can be called from a signal. */
1177 pt = &active_timers[ts->clock->type];
1178 for(;;) {
1179 t = *pt;
1180 if (!t)
1181 break;
1182 if (t->expire_time > expire_time)
1183 break;
1184 pt = &t->next;
1185 }
1186 ts->expire_time = expire_time;
1187 ts->next = *pt;
1188 *pt = ts;
1189
1190 /* Rearm if necessary */
1191 if (pt == &active_timers[ts->clock->type]) {
1192 if ((alarm_timer->flags & ALARM_FLAG_EXPIRED) == 0) {
1193 qemu_rearm_alarm_timer(alarm_timer);
1194 }
1195 /* Interrupt execution to force deadline recalculation. */
1196 if (use_icount && cpu_single_env) {
1197 cpu_exit(cpu_single_env);
1198 }
1199 }
1200 }
1201
1202 int qemu_timer_pending(QEMUTimer *ts)
1203 {
1204 QEMUTimer *t;
1205 for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
1206 if (t == ts)
1207 return 1;
1208 }
1209 return 0;
1210 }
1211
1212 static inline int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
1213 {
1214 if (!timer_head)
1215 return 0;
1216 return (timer_head->expire_time <= current_time);
1217 }
1218
1219 static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1220 {
1221 QEMUTimer *ts;
1222
1223 for(;;) {
1224 ts = *ptimer_head;
1225 if (!ts || ts->expire_time > current_time)
1226 break;
1227 /* remove timer from the list before calling the callback */
1228 *ptimer_head = ts->next;
1229 ts->next = NULL;
1230
1231 /* run the callback (the timer list can be modified) */
1232 ts->cb(ts->opaque);
1233 }
1234 }
1235
1236 int64_t qemu_get_clock(QEMUClock *clock)
1237 {
1238 switch(clock->type) {
1239 case QEMU_TIMER_REALTIME:
1240 return get_clock() / 1000000;
1241 default:
1242 case QEMU_TIMER_VIRTUAL:
1243 if (use_icount) {
1244 return cpu_get_icount();
1245 } else {
1246 return cpu_get_clock();
1247 }
1248 }
1249 }
1250
1251 static void init_timers(void)
1252 {
1253 init_get_clock();
1254 ticks_per_sec = QEMU_TIMER_BASE;
1255 rt_clock = qemu_new_clock(QEMU_TIMER_REALTIME);
1256 vm_clock = qemu_new_clock(QEMU_TIMER_VIRTUAL);
1257 }
1258
1259 /* save a timer */
1260 void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
1261 {
1262 uint64_t expire_time;
1263
1264 if (qemu_timer_pending(ts)) {
1265 expire_time = ts->expire_time;
1266 } else {
1267 expire_time = -1;
1268 }
1269 qemu_put_be64(f, expire_time);
1270 }
1271
1272 void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
1273 {
1274 uint64_t expire_time;
1275
1276 expire_time = qemu_get_be64(f);
1277 if (expire_time != -1) {
1278 qemu_mod_timer(ts, expire_time);
1279 } else {
1280 qemu_del_timer(ts);
1281 }
1282 }
1283
1284 static void timer_save(QEMUFile *f, void *opaque)
1285 {
1286 if (cpu_ticks_enabled) {
1287 hw_error("cannot save state if virtual timers are running");
1288 }
1289 qemu_put_be64(f, cpu_ticks_offset);
1290 qemu_put_be64(f, ticks_per_sec);
1291 qemu_put_be64(f, cpu_clock_offset);
1292 }
1293
1294 static int timer_load(QEMUFile *f, void *opaque, int version_id)
1295 {
1296 if (version_id != 1 && version_id != 2)
1297 return -EINVAL;
1298 if (cpu_ticks_enabled) {
1299 return -EINVAL;
1300 }
1301 cpu_ticks_offset=qemu_get_be64(f);
1302 ticks_per_sec=qemu_get_be64(f);
1303 if (version_id == 2) {
1304 cpu_clock_offset=qemu_get_be64(f);
1305 }
1306 return 0;
1307 }
1308
1309 #ifdef _WIN32
1310 static void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg,
1311 DWORD_PTR dwUser, DWORD_PTR dw1,
1312 DWORD_PTR dw2)
1313 #else
1314 static void host_alarm_handler(int host_signum)
1315 #endif
1316 {
1317 #if 0
1318 #define DISP_FREQ 1000
1319 {
1320 static int64_t delta_min = INT64_MAX;
1321 static int64_t delta_max, delta_cum, last_clock, delta, ti;
1322 static int count;
1323 ti = qemu_get_clock(vm_clock);
1324 if (last_clock != 0) {
1325 delta = ti - last_clock;
1326 if (delta < delta_min)
1327 delta_min = delta;
1328 if (delta > delta_max)
1329 delta_max = delta;
1330 delta_cum += delta;
1331 if (++count == DISP_FREQ) {
1332 printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
1333 muldiv64(delta_min, 1000000, ticks_per_sec),
1334 muldiv64(delta_max, 1000000, ticks_per_sec),
1335 muldiv64(delta_cum, 1000000 / DISP_FREQ, ticks_per_sec),
1336 (double)ticks_per_sec / ((double)delta_cum / DISP_FREQ));
1337 count = 0;
1338 delta_min = INT64_MAX;
1339 delta_max = 0;
1340 delta_cum = 0;
1341 }
1342 }
1343 last_clock = ti;
1344 }
1345 #endif
1346 if (alarm_has_dynticks(alarm_timer) ||
1347 (!use_icount &&
1348 qemu_timer_expired(active_timers[QEMU_TIMER_VIRTUAL],
1349 qemu_get_clock(vm_clock))) ||
1350 qemu_timer_expired(active_timers[QEMU_TIMER_REALTIME],
1351 qemu_get_clock(rt_clock))) {
1352 CPUState *env = next_cpu;
1353
1354 #ifdef _WIN32
1355 struct qemu_alarm_win32 *data = ((struct qemu_alarm_timer*)dwUser)->priv;
1356 SetEvent(data->host_alarm);
1357 #else
1358 static const char byte = 0;
1359 write(alarm_timer_wfd, &byte, sizeof(byte));
1360 #endif
1361 alarm_timer->flags |= ALARM_FLAG_EXPIRED;
1362
1363 if (env) {
1364 /* stop the currently executing cpu because a timer occured */
1365 cpu_exit(env);
1366 #ifdef CONFIG_KQEMU
1367 if (env->kqemu_enabled) {
1368 kqemu_cpu_interrupt(env);
1369 }
1370 #endif
1371 }
1372 event_pending = 1;
1373 }
1374 }
1375
1376 static int64_t qemu_next_deadline(void)
1377 {
1378 int64_t delta;
1379
1380 if (active_timers[QEMU_TIMER_VIRTUAL]) {
1381 delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time -
1382 qemu_get_clock(vm_clock);
1383 } else {
1384 /* To avoid problems with overflow limit this to 2^32. */
1385 delta = INT32_MAX;
1386 }
1387
1388 if (delta < 0)
1389 delta = 0;
1390
1391 return delta;
1392 }
1393
1394 #if defined(__linux__) || defined(_WIN32)
1395 static uint64_t qemu_next_deadline_dyntick(void)
1396 {
1397 int64_t delta;
1398 int64_t rtdelta;
1399
1400 if (use_icount)
1401 delta = INT32_MAX;
1402 else
1403 delta = (qemu_next_deadline() + 999) / 1000;
1404
1405 if (active_timers[QEMU_TIMER_REALTIME]) {
1406 rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time -
1407 qemu_get_clock(rt_clock))*1000;
1408 if (rtdelta < delta)
1409 delta = rtdelta;
1410 }
1411
1412 if (delta < MIN_TIMER_REARM_US)
1413 delta = MIN_TIMER_REARM_US;
1414
1415 return delta;
1416 }
1417 #endif
1418
1419 #ifndef _WIN32
1420
1421 /* Sets a specific flag */
1422 static int fcntl_setfl(int fd, int flag)
1423 {
1424 int flags;
1425
1426 flags = fcntl(fd, F_GETFL);
1427 if (flags == -1)
1428 return -errno;
1429
1430 if (fcntl(fd, F_SETFL, flags | flag) == -1)
1431 return -errno;
1432
1433 return 0;
1434 }
1435
1436 #if defined(__linux__)
1437
1438 #define RTC_FREQ 1024
1439
1440 static void enable_sigio_timer(int fd)
1441 {
1442 struct sigaction act;
1443
1444 /* timer signal */
1445 sigfillset(&act.sa_mask);
1446 act.sa_flags = 0;
1447 act.sa_handler = host_alarm_handler;
1448
1449 sigaction(SIGIO, &act, NULL);
1450 fcntl_setfl(fd, O_ASYNC);
1451 fcntl(fd, F_SETOWN, getpid());
1452 }
1453
1454 static int hpet_start_timer(struct qemu_alarm_timer *t)
1455 {
1456 struct hpet_info info;
1457 int r, fd;
1458
1459 fd = open("/dev/hpet", O_RDONLY);
1460 if (fd < 0)
1461 return -1;
1462
1463 /* Set frequency */
1464 r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
1465 if (r < 0) {
1466 fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
1467 "error, but for better emulation accuracy type:\n"
1468 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
1469 goto fail;
1470 }
1471
1472 /* Check capabilities */
1473 r = ioctl(fd, HPET_INFO, &info);
1474 if (r < 0)
1475 goto fail;
1476
1477 /* Enable periodic mode */
1478 r = ioctl(fd, HPET_EPI, 0);
1479 if (info.hi_flags && (r < 0))
1480 goto fail;
1481
1482 /* Enable interrupt */
1483 r = ioctl(fd, HPET_IE_ON, 0);
1484 if (r < 0)
1485 goto fail;
1486
1487 enable_sigio_timer(fd);
1488 t->priv = (void *)(long)fd;
1489
1490 return 0;
1491 fail:
1492 close(fd);
1493 return -1;
1494 }
1495
1496 static void hpet_stop_timer(struct qemu_alarm_timer *t)
1497 {
1498 int fd = (long)t->priv;
1499
1500 close(fd);
1501 }
1502
1503 static int rtc_start_timer(struct qemu_alarm_timer *t)
1504 {
1505 int rtc_fd;
1506 unsigned long current_rtc_freq = 0;
1507
1508 TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
1509 if (rtc_fd < 0)
1510 return -1;
1511 ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
1512 if (current_rtc_freq != RTC_FREQ &&
1513 ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
1514 fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
1515 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
1516 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
1517 goto fail;
1518 }
1519 if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
1520 fail:
1521 close(rtc_fd);
1522 return -1;
1523 }
1524
1525 enable_sigio_timer(rtc_fd);
1526
1527 t->priv = (void *)(long)rtc_fd;
1528
1529 return 0;
1530 }
1531
1532 static void rtc_stop_timer(struct qemu_alarm_timer *t)
1533 {
1534 int rtc_fd = (long)t->priv;
1535
1536 close(rtc_fd);
1537 }
1538
1539 static int dynticks_start_timer(struct qemu_alarm_timer *t)
1540 {
1541 struct sigevent ev;
1542 timer_t host_timer;
1543 struct sigaction act;
1544
1545 sigfillset(&act.sa_mask);
1546 act.sa_flags = 0;
1547 act.sa_handler = host_alarm_handler;
1548
1549 sigaction(SIGALRM, &act, NULL);
1550
1551 ev.sigev_value.sival_int = 0;
1552 ev.sigev_notify = SIGEV_SIGNAL;
1553 ev.sigev_signo = SIGALRM;
1554
1555 if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
1556 perror("timer_create");
1557
1558 /* disable dynticks */
1559 fprintf(stderr, "Dynamic Ticks disabled\n");
1560
1561 return -1;
1562 }
1563
1564 t->priv = (void *)(long)host_timer;
1565
1566 return 0;
1567 }
1568
1569 static void dynticks_stop_timer(struct qemu_alarm_timer *t)
1570 {
1571 timer_t host_timer = (timer_t)(long)t->priv;
1572
1573 timer_delete(host_timer);
1574 }
1575
1576 static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
1577 {
1578 timer_t host_timer = (timer_t)(long)t->priv;
1579 struct itimerspec timeout;
1580 int64_t nearest_delta_us = INT64_MAX;
1581 int64_t current_us;
1582
1583 if (!active_timers[QEMU_TIMER_REALTIME] &&
1584 !active_timers[QEMU_TIMER_VIRTUAL])
1585 return;
1586
1587 nearest_delta_us = qemu_next_deadline_dyntick();
1588
1589 /* check whether a timer is already running */
1590 if (timer_gettime(host_timer, &timeout)) {
1591 perror("gettime");
1592 fprintf(stderr, "Internal timer error: aborting\n");
1593 exit(1);
1594 }
1595 current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
1596 if (current_us && current_us <= nearest_delta_us)
1597 return;
1598
1599 timeout.it_interval.tv_sec = 0;
1600 timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
1601 timeout.it_value.tv_sec = nearest_delta_us / 1000000;
1602 timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
1603 if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
1604 perror("settime");
1605 fprintf(stderr, "Internal timer error: aborting\n");
1606 exit(1);
1607 }
1608 }
1609
1610 #endif /* defined(__linux__) */
1611
1612 static int unix_start_timer(struct qemu_alarm_timer *t)
1613 {
1614 struct sigaction act;
1615 struct itimerval itv;
1616 int err;
1617
1618 /* timer signal */
1619 sigfillset(&act.sa_mask);
1620 act.sa_flags = 0;
1621 act.sa_handler = host_alarm_handler;
1622
1623 sigaction(SIGALRM, &act, NULL);
1624
1625 itv.it_interval.tv_sec = 0;
1626 /* for i386 kernel 2.6 to get 1 ms */
1627 itv.it_interval.tv_usec = 999;
1628 itv.it_value.tv_sec = 0;
1629 itv.it_value.tv_usec = 10 * 1000;
1630
1631 err = setitimer(ITIMER_REAL, &itv, NULL);
1632 if (err)
1633 return -1;
1634
1635 return 0;
1636 }
1637
1638 static void unix_stop_timer(struct qemu_alarm_timer *t)
1639 {
1640 struct itimerval itv;
1641
1642 memset(&itv, 0, sizeof(itv));
1643 setitimer(ITIMER_REAL, &itv, NULL);
1644 }
1645
1646 #endif /* !defined(_WIN32) */
1647
1648 static void try_to_rearm_timer(void *opaque)
1649 {
1650 struct qemu_alarm_timer *t = opaque;
1651 #ifndef _WIN32
1652 ssize_t len;
1653
1654 /* Drain the notify pipe */
1655 do {
1656 char buffer[512];
1657 len = read(alarm_timer_rfd, buffer, sizeof(buffer));
1658 } while ((len == -1 && errno == EINTR) || len > 0);
1659 #endif
1660
1661 if (t->flags & ALARM_FLAG_EXPIRED) {
1662 alarm_timer->flags &= ~ALARM_FLAG_EXPIRED;
1663 qemu_rearm_alarm_timer(alarm_timer);
1664 }
1665 }
1666
1667 #ifdef _WIN32
1668
1669 static int win32_start_timer(struct qemu_alarm_timer *t)
1670 {
1671 TIMECAPS tc;
1672 struct qemu_alarm_win32 *data = t->priv;
1673 UINT flags;
1674
1675 data->host_alarm = CreateEvent(NULL, FALSE, FALSE, NULL);
1676 if (!data->host_alarm) {
1677 perror("Failed CreateEvent");
1678 return -1;
1679 }
1680
1681 memset(&tc, 0, sizeof(tc));
1682 timeGetDevCaps(&tc, sizeof(tc));
1683
1684 if (data->period < tc.wPeriodMin)
1685 data->period = tc.wPeriodMin;
1686
1687 timeBeginPeriod(data->period);
1688
1689 flags = TIME_CALLBACK_FUNCTION;
1690 if (alarm_has_dynticks(t))
1691 flags |= TIME_ONESHOT;
1692 else
1693 flags |= TIME_PERIODIC;
1694
1695 data->timerId = timeSetEvent(1, // interval (ms)
1696 data->period, // resolution
1697 host_alarm_handler, // function
1698 (DWORD)t, // parameter
1699 flags);
1700
1701 if (!data->timerId) {
1702 perror("Failed to initialize win32 alarm timer");
1703
1704 timeEndPeriod(data->period);
1705 CloseHandle(data->host_alarm);
1706 return -1;
1707 }
1708
1709 qemu_add_wait_object(data->host_alarm, try_to_rearm_timer, t);
1710
1711 return 0;
1712 }
1713
1714 static void win32_stop_timer(struct qemu_alarm_timer *t)
1715 {
1716 struct qemu_alarm_win32 *data = t->priv;
1717
1718 timeKillEvent(data->timerId);
1719 timeEndPeriod(data->period);
1720
1721 CloseHandle(data->host_alarm);
1722 }
1723
1724 static void win32_rearm_timer(struct qemu_alarm_timer *t)
1725 {
1726 struct qemu_alarm_win32 *data = t->priv;
1727 uint64_t nearest_delta_us;
1728
1729 if (!active_timers[QEMU_TIMER_REALTIME] &&
1730 !active_timers[QEMU_TIMER_VIRTUAL])
1731 return;
1732
1733 nearest_delta_us = qemu_next_deadline_dyntick();
1734 nearest_delta_us /= 1000;
1735
1736 timeKillEvent(data->timerId);
1737
1738 data->timerId = timeSetEvent(1,
1739 data->period,
1740 host_alarm_handler,
1741 (DWORD)t,
1742 TIME_ONESHOT | TIME_PERIODIC);
1743
1744 if (!data->timerId) {
1745 perror("Failed to re-arm win32 alarm timer");
1746
1747 timeEndPeriod(data->period);
1748 CloseHandle(data->host_alarm);
1749 exit(1);
1750 }
1751 }
1752
1753 #endif /* _WIN32 */
1754
1755 static int init_timer_alarm(void)
1756 {
1757 struct qemu_alarm_timer *t = NULL;
1758 int i, err = -1;
1759
1760 #ifndef _WIN32
1761 int fds[2];
1762
1763 err = pipe(fds);
1764 if (err == -1)
1765 return -errno;
1766
1767 err = fcntl_setfl(fds[0], O_NONBLOCK);
1768 if (err < 0)
1769 goto fail;
1770
1771 err = fcntl_setfl(fds[1], O_NONBLOCK);
1772 if (err < 0)
1773 goto fail;
1774
1775 alarm_timer_rfd = fds[0];
1776 alarm_timer_wfd = fds[1];
1777 #endif
1778
1779 for (i = 0; alarm_timers[i].name; i++) {
1780 t = &alarm_timers[i];
1781
1782 err = t->start(t);
1783 if (!err)
1784 break;
1785 }
1786
1787 if (err) {
1788 err = -ENOENT;
1789 goto fail;
1790 }
1791
1792 #ifndef _WIN32
1793 qemu_set_fd_handler2(alarm_timer_rfd, NULL,
1794 try_to_rearm_timer, NULL, t);
1795 #endif
1796
1797 alarm_timer = t;
1798
1799 return 0;
1800
1801 fail:
1802 #ifndef _WIN32
1803 close(fds[0]);
1804 close(fds[1]);
1805 #endif
1806 return err;
1807 }
1808
1809 static void quit_timers(void)
1810 {
1811 alarm_timer->stop(alarm_timer);
1812 alarm_timer = NULL;
1813 }
1814
1815 /***********************************************************/
1816 /* host time/date access */
1817 void qemu_get_timedate(struct tm *tm, int offset)
1818 {
1819 time_t ti;
1820 struct tm *ret;
1821
1822 time(&ti);
1823 ti += offset;
1824 if (rtc_date_offset == -1) {
1825 if (rtc_utc)
1826 ret = gmtime(&ti);
1827 else
1828 ret = localtime(&ti);
1829 } else {
1830 ti -= rtc_date_offset;
1831 ret = gmtime(&ti);
1832 }
1833
1834 memcpy(tm, ret, sizeof(struct tm));
1835 }
1836
1837 int qemu_timedate_diff(struct tm *tm)
1838 {
1839 time_t seconds;
1840
1841 if (rtc_date_offset == -1)
1842 if (rtc_utc)
1843 seconds = mktimegm(tm);
1844 else
1845 seconds = mktime(tm);
1846 else
1847 seconds = mktimegm(tm) + rtc_date_offset;
1848
1849 return seconds - time(NULL);
1850 }
1851
1852 #ifdef _WIN32
1853 static void socket_cleanup(void)
1854 {
1855 WSACleanup();
1856 }
1857
1858 static int socket_init(void)
1859 {
1860 WSADATA Data;
1861 int ret, err;
1862
1863 ret = WSAStartup(MAKEWORD(2,2), &Data);
1864 if (ret != 0) {
1865 err = WSAGetLastError();
1866 fprintf(stderr, "WSAStartup: %d\n", err);
1867 return -1;
1868 }
1869 atexit(socket_cleanup);
1870 return 0;
1871 }
1872 #endif
1873
1874 const char *get_opt_name(char *buf, int buf_size, const char *p, char delim)
1875 {
1876 char *q;
1877
1878 q = buf;
1879 while (*p != '\0' && *p != delim) {
1880 if (q && (q - buf) < buf_size - 1)
1881 *q++ = *p;
1882 p++;
1883 }
1884 if (q)
1885 *q = '\0';
1886
1887 return p;
1888 }
1889
1890 const char *get_opt_value(char *buf, int buf_size, const char *p)
1891 {
1892 char *q;
1893
1894 q = buf;
1895 while (*p != '\0') {
1896 if (*p == ',') {
1897 if (*(p + 1) != ',')
1898 break;
1899 p++;
1900 }
1901 if (q && (q - buf) < buf_size - 1)
1902 *q++ = *p;
1903 p++;
1904 }
1905 if (q)
1906 *q = '\0';
1907
1908 return p;
1909 }
1910
1911 int get_param_value(char *buf, int buf_size,
1912 const char *tag, const char *str)
1913 {
1914 const char *p;
1915 char option[128];
1916
1917 p = str;
1918 for(;;) {
1919 p = get_opt_name(option, sizeof(option), p, '=');
1920 if (*p != '=')
1921 break;
1922 p++;
1923 if (!strcmp(tag, option)) {
1924 (void)get_opt_value(buf, buf_size, p);
1925 return strlen(buf);
1926 } else {
1927 p = get_opt_value(NULL, 0, p);
1928 }
1929 if (*p != ',')
1930 break;
1931 p++;
1932 }
1933 return 0;
1934 }
1935
1936 int check_params(char *buf, int buf_size,
1937 const char * const *params, const char *str)
1938 {
1939 const char *p;
1940 int i;
1941
1942 p = str;
1943 while (*p != '\0') {
1944 p = get_opt_name(buf, buf_size, p, '=');
1945 if (*p != '=')
1946 return -1;
1947 p++;
1948 for(i = 0; params[i] != NULL; i++)
1949 if (!strcmp(params[i], buf))
1950 break;
1951 if (params[i] == NULL)
1952 return -1;
1953 p = get_opt_value(NULL, 0, p);
1954 if (*p != ',')
1955 break;
1956 p++;
1957 }
1958 return 0;
1959 }
1960
1961 /***********************************************************/
1962 /* Bluetooth support */
1963 static int nb_hcis;
1964 static int cur_hci;
1965 static struct HCIInfo *hci_table[MAX_NICS];
1966
1967 static struct bt_vlan_s {
1968 struct bt_scatternet_s net;
1969 int id;
1970 struct bt_vlan_s *next;
1971 } *first_bt_vlan;
1972
1973 /* find or alloc a new bluetooth "VLAN" */
1974 static struct bt_scatternet_s *qemu_find_bt_vlan(int id)
1975 {
1976 struct bt_vlan_s **pvlan, *vlan;
1977 for (vlan = first_bt_vlan; vlan != NULL; vlan = vlan->next) {
1978 if (vlan->id == id)
1979 return &vlan->net;
1980 }
1981 vlan = qemu_mallocz(sizeof(struct bt_vlan_s));
1982 vlan->id = id;
1983 pvlan = &first_bt_vlan;
1984 while (*pvlan != NULL)
1985 pvlan = &(*pvlan)->next;
1986 *pvlan = vlan;
1987 return &vlan->net;
1988 }
1989
1990 static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
1991 {
1992 }
1993
1994 static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
1995 {
1996 return -ENOTSUP;
1997 }
1998
1999 static struct HCIInfo null_hci = {
2000 .cmd_send = null_hci_send,
2001 .sco_send = null_hci_send,
2002 .acl_send = null_hci_send,
2003 .bdaddr_set = null_hci_addr_set,
2004 };
2005
2006 struct HCIInfo *qemu_next_hci(void)
2007 {
2008 if (cur_hci == nb_hcis)
2009 return &null_hci;
2010
2011 return hci_table[cur_hci++];
2012 }
2013
2014 static struct HCIInfo *hci_init(const char *str)
2015 {
2016 char *endp;
2017 struct bt_scatternet_s *vlan = 0;
2018
2019 if (!strcmp(str, "null"))
2020 /* null */
2021 return &null_hci;
2022 else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
2023 /* host[:hciN] */
2024 return bt_host_hci(str[4] ? str + 5 : "hci0");
2025 else if (!strncmp(str, "hci", 3)) {
2026 /* hci[,vlan=n] */
2027 if (str[3]) {
2028 if (!strncmp(str + 3, ",vlan=", 6)) {
2029 vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
2030 if (*endp)
2031 vlan = 0;
2032 }
2033 } else
2034 vlan = qemu_find_bt_vlan(0);
2035 if (vlan)
2036 return bt_new_hci(vlan);
2037 }
2038
2039 fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str);
2040
2041 return 0;
2042 }
2043
2044 static int bt_hci_parse(const char *str)
2045 {
2046 struct HCIInfo *hci;
2047 bdaddr_t bdaddr;
2048
2049 if (nb_hcis >= MAX_NICS) {
2050 fprintf(stderr, "qemu: Too many bluetooth HCIs (max %i).\n", MAX_NICS);
2051 return -1;
2052 }
2053
2054 hci = hci_init(str);
2055 if (!hci)
2056 return -1;
2057
2058 bdaddr.b[0] = 0x52;
2059 bdaddr.b[1] = 0x54;
2060 bdaddr.b[2] = 0x00;
2061 bdaddr.b[3] = 0x12;
2062 bdaddr.b[4] = 0x34;
2063 bdaddr.b[5] = 0x56 + nb_hcis;
2064 hci->bdaddr_set(hci, bdaddr.b);
2065
2066 hci_table[nb_hcis++] = hci;
2067
2068 return 0;
2069 }
2070
2071 static void bt_vhci_add(int vlan_id)
2072 {
2073 struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
2074
2075 if (!vlan->slave)
2076 fprintf(stderr, "qemu: warning: adding a VHCI to "
2077 "an empty scatternet %i\n", vlan_id);
2078
2079 bt_vhci_init(bt_new_hci(vlan));
2080 }
2081
2082 static struct bt_device_s *bt_device_add(const char *opt)
2083 {
2084 struct bt_scatternet_s *vlan;
2085 int vlan_id = 0;
2086 char *endp = strstr(opt, ",vlan=");
2087 int len = (endp ? endp - opt : strlen(opt)) + 1;
2088 char devname[10];
2089
2090 pstrcpy(devname, MIN(sizeof(devname), len), opt);
2091
2092 if (endp) {
2093 vlan_id = strtol(endp + 6, &endp, 0);
2094 if (*endp) {
2095 fprintf(stderr, "qemu: unrecognised bluetooth vlan Id\n");
2096 return 0;
2097 }
2098 }
2099
2100 vlan = qemu_find_bt_vlan(vlan_id);
2101
2102 if (!vlan->slave)
2103 fprintf(stderr, "qemu: warning: adding a slave device to "
2104 "an empty scatternet %i\n", vlan_id);
2105
2106 if (!strcmp(devname, "keyboard"))
2107 return bt_keyboard_init(vlan);
2108
2109 fprintf(stderr, "qemu: unsupported bluetooth device `%s'\n", devname);
2110 return 0;
2111 }
2112
2113 static int bt_parse(const char *opt)
2114 {
2115 const char *endp, *p;
2116 int vlan;
2117
2118 if (strstart(opt, "hci", &endp)) {
2119 if (!*endp || *endp == ',') {
2120 if (*endp)
2121 if (!strstart(endp, ",vlan=", 0))
2122 opt = endp + 1;
2123
2124 return bt_hci_parse(opt);
2125 }
2126 } else if (strstart(opt, "vhci", &endp)) {
2127 if (!*endp || *endp == ',') {
2128 if (*endp) {
2129 if (strstart(endp, ",vlan=", &p)) {
2130 vlan = strtol(p, (char **) &endp, 0);
2131 if (*endp) {
2132 fprintf(stderr, "qemu: bad scatternet '%s'\n", p);
2133 return 1;
2134 }
2135 } else {
2136 fprintf(stderr, "qemu: bad parameter '%s'\n", endp + 1);
2137 return 1;
2138 }
2139 } else
2140 vlan = 0;
2141
2142 bt_vhci_add(vlan);
2143 return 0;
2144 }
2145 } else if (strstart(opt, "device:", &endp))
2146 return !bt_device_add(endp);
2147
2148 fprintf(stderr, "qemu: bad bluetooth parameter '%s'\n", opt);
2149 return 1;
2150 }
2151
2152 /***********************************************************/
2153 /* QEMU Block devices */
2154
2155 #define HD_ALIAS "index=%d,media=disk"
2156 #define CDROM_ALIAS "index=2,media=cdrom"
2157 #define FD_ALIAS "index=%d,if=floppy"
2158 #define PFLASH_ALIAS "if=pflash"
2159 #define MTD_ALIAS "if=mtd"
2160 #define SD_ALIAS "index=0,if=sd"
2161
2162 static int drive_opt_get_free_idx(void)
2163 {
2164 int index;
2165
2166 for (index = 0; index < MAX_DRIVES; index++)
2167 if (!drives_opt[index].used) {
2168 drives_opt[index].used = 1;
2169 return index;
2170 }
2171
2172 return -1;
2173 }
2174
2175 static int drive_get_free_idx(void)
2176 {
2177 int index;
2178
2179 for (index = 0; index < MAX_DRIVES; index++)
2180 if (!drives_table[index].used) {
2181 drives_table[index].used = 1;
2182 return index;
2183 }
2184
2185 return -1;
2186 }
2187
2188 int drive_add(const char *file, const char *fmt, ...)
2189 {
2190 va_list ap;
2191 int index = drive_opt_get_free_idx();
2192
2193 if (nb_drives_opt >= MAX_DRIVES || index == -1) {
2194 fprintf(stderr, "qemu: too many drives\n");
2195 return -1;
2196 }
2197
2198 drives_opt[index].file = file;
2199 va_start(ap, fmt);
2200 vsnprintf(drives_opt[index].opt,
2201 sizeof(drives_opt[0].opt), fmt, ap);
2202 va_end(ap);
2203
2204 nb_drives_opt++;
2205 return index;
2206 }
2207
2208 void drive_remove(int index)
2209 {
2210 drives_opt[index].used = 0;
2211 nb_drives_opt--;
2212 }
2213
2214 int drive_get_index(BlockInterfaceType type, int bus, int unit)
2215 {
2216 int index;
2217
2218 /* seek interface, bus and unit */
2219
2220 for (index = 0; index < MAX_DRIVES; index++)
2221 if (drives_table[index].type == type &&
2222 drives_table[index].bus == bus &&
2223 drives_table[index].unit == unit &&
2224 drives_table[index].used)
2225 return index;
2226
2227 return -1;
2228 }
2229
2230 int drive_get_max_bus(BlockInterfaceType type)
2231 {
2232 int max_bus;
2233 int index;
2234
2235 max_bus = -1;
2236 for (index = 0; index < nb_drives; index++) {
2237 if(drives_table[index].type == type &&
2238 drives_table[index].bus > max_bus)
2239 max_bus = drives_table[index].bus;
2240 }
2241 return max_bus;
2242 }
2243
2244 const char *drive_get_serial(BlockDriverState *bdrv)
2245 {
2246 int index;
2247
2248 for (index = 0; index < nb_drives; index++)
2249 if (drives_table[index].bdrv == bdrv)
2250 return drives_table[index].serial;
2251
2252 return "\0";
2253 }
2254
2255 BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
2256 {
2257 int index;
2258
2259 for (index = 0; index < nb_drives; index++)
2260 if (drives_table[index].bdrv == bdrv)
2261 return drives_table[index].onerror;
2262
2263 return BLOCK_ERR_STOP_ENOSPC;
2264 }
2265
2266 static void bdrv_format_print(void *opaque, const char *name)
2267 {
2268 fprintf(stderr, " %s", name);
2269 }
2270
2271 void drive_uninit(BlockDriverState *bdrv)
2272 {
2273 int i;
2274
2275 for (i = 0; i < MAX_DRIVES; i++)
2276 if (drives_table[i].bdrv == bdrv) {
2277 drives_table[i].bdrv = NULL;
2278 drives_table[i].used = 0;
2279 drive_remove(drives_table[i].drive_opt_idx);
2280 nb_drives--;
2281 break;
2282 }
2283 }
2284
2285 int drive_init(struct drive_opt *arg, int snapshot, void *opaque)
2286 {
2287 char buf[128];
2288 char file[1024];
2289 char devname[128];
2290 char serial[21];
2291 const char *mediastr = "";
2292 BlockInterfaceType type;
2293 enum { MEDIA_DISK, MEDIA_CDROM } media;
2294 int bus_id, unit_id;
2295 int cyls, heads, secs, translation;
2296 BlockDriverState *bdrv;
2297 BlockDriver *drv = NULL;
2298 QEMUMachine *machine = opaque;
2299 int max_devs;
2300 int index;
2301 int cache;
2302 int bdrv_flags, onerror;
2303 int drives_table_idx;
2304 char *str = arg->opt;
2305 static const char * const params[] = { "bus", "unit", "if", "index",
2306 "cyls", "heads", "secs", "trans",
2307 "media", "snapshot", "file",
2308 "cache", "format", "serial", "werror",
2309 NULL };
2310
2311 if (check_params(buf, sizeof(buf), params, str) < 0) {
2312 fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n",
2313 buf, str);
2314 return -1;
2315 }
2316
2317 file[0] = 0;
2318 cyls = heads = secs = 0;
2319 bus_id = 0;
2320 unit_id = -1;
2321 translation = BIOS_ATA_TRANSLATION_AUTO;
2322 index = -1;
2323 cache = 3;
2324
2325 if (machine->use_scsi) {
2326 type = IF_SCSI;
2327 max_devs = MAX_SCSI_DEVS;
2328 pstrcpy(devname, sizeof(devname), "scsi");
2329 } else {
2330 type = IF_IDE;
2331 max_devs = MAX_IDE_DEVS;
2332 pstrcpy(devname, sizeof(devname), "ide");
2333 }
2334 media = MEDIA_DISK;
2335
2336 /* extract parameters */
2337
2338 if (get_param_value(buf, sizeof(buf), "bus", str)) {
2339 bus_id = strtol(buf, NULL, 0);
2340 if (bus_id < 0) {
2341 fprintf(stderr, "qemu: '%s' invalid bus id\n", str);
2342 return -1;
2343 }
2344 }
2345
2346 if (get_param_value(buf, sizeof(buf), "unit", str)) {
2347 unit_id = strtol(buf, NULL, 0);
2348 if (unit_id < 0) {
2349 fprintf(stderr, "qemu: '%s' invalid unit id\n", str);
2350 return -1;
2351 }
2352 }
2353
2354 if (get_param_value(buf, sizeof(buf), "if", str)) {
2355 pstrcpy(devname, sizeof(devname), buf);
2356 if (!strcmp(buf, "ide")) {
2357 type = IF_IDE;
2358 max_devs = MAX_IDE_DEVS;
2359 } else if (!strcmp(buf, "scsi")) {
2360 type = IF_SCSI;
2361 max_devs = MAX_SCSI_DEVS;
2362 } else if (!strcmp(buf, "floppy")) {
2363 type = IF_FLOPPY;
2364 max_devs = 0;
2365 } else if (!strcmp(buf, "pflash")) {
2366 type = IF_PFLASH;
2367 max_devs = 0;
2368 } else if (!strcmp(buf, "mtd")) {
2369 type = IF_MTD;
2370 max_devs = 0;
2371 } else if (!strcmp(buf, "sd")) {
2372 type = IF_SD;
2373 max_devs = 0;
2374 } else if (!strcmp(buf, "virtio")) {
2375 type = IF_VIRTIO;
2376 max_devs = 0;
2377 } else if (!strcmp(buf, "xen")) {
2378 type = IF_XEN;
2379 max_devs = 0;
2380 } else {
2381 fprintf(stderr, "qemu: '%s' unsupported bus type '%s'\n", str, buf);
2382 return -1;
2383 }
2384 }
2385
2386 if (get_param_value(buf, sizeof(buf), "index", str)) {
2387 index = strtol(buf, NULL, 0);
2388 if (index < 0) {
2389 fprintf(stderr, "qemu: '%s' invalid index\n", str);
2390 return -1;
2391 }
2392 }
2393
2394 if (get_param_value(buf, sizeof(buf), "cyls", str)) {
2395 cyls = strtol(buf, NULL, 0);
2396 }
2397
2398 if (get_param_value(buf, sizeof(buf), "heads", str)) {
2399 heads = strtol(buf, NULL, 0);
2400 }
2401
2402 if (get_param_value(buf, sizeof(buf), "secs", str)) {
2403 secs = strtol(buf, NULL, 0);
2404 }
2405
2406 if (cyls || heads || secs) {
2407 if (cyls < 1 || cyls > 16383) {
2408 fprintf(stderr, "qemu: '%s' invalid physical cyls number\n", str);
2409 return -1;
2410 }
2411 if (heads < 1 || heads > 16) {
2412 fprintf(stderr, "qemu: '%s' invalid physical heads number\n", str);
2413 return -1;
2414 }
2415 if (secs < 1 || secs > 63) {
2416 fprintf(stderr, "qemu: '%s' invalid physical secs number\n", str);
2417 return -1;
2418 }
2419 }
2420
2421 if (get_param_value(buf, sizeof(buf), "trans", str)) {
2422 if (!cyls) {
2423 fprintf(stderr,
2424 "qemu: '%s' trans must be used with cyls,heads and secs\n",
2425 str);
2426 return -1;
2427 }
2428 if (!strcmp(buf, "none"))
2429 translation = BIOS_ATA_TRANSLATION_NONE;
2430 else if (!strcmp(buf, "lba"))
2431 translation = BIOS_ATA_TRANSLATION_LBA;
2432 else if (!strcmp(buf, "auto"))
2433 translation = BIOS_ATA_TRANSLATION_AUTO;
2434 else {
2435 fprintf(stderr, "qemu: '%s' invalid translation type\n", str);
2436 return -1;
2437 }
2438 }
2439
2440 if (get_param_value(buf, sizeof(buf), "media", str)) {
2441 if (!strcmp(buf, "disk")) {
2442 media = MEDIA_DISK;
2443 } else if (!strcmp(buf, "cdrom")) {
2444 if (cyls || secs || heads) {
2445 fprintf(stderr,
2446 "qemu: '%s' invalid physical CHS format\n", str);
2447 return -1;
2448 }
2449 media = MEDIA_CDROM;
2450 } else {
2451 fprintf(stderr, "qemu: '%s' invalid media\n", str);
2452 return -1;
2453 }
2454 }
2455
2456 if (get_param_value(buf, sizeof(buf), "snapshot", str)) {
2457 if (!strcmp(buf, "on"))
2458 snapshot = 1;
2459 else if (!strcmp(buf, "off"))
2460 snapshot = 0;
2461 else {
2462 fprintf(stderr, "qemu: '%s' invalid snapshot option\n", str);
2463 return -1;
2464 }
2465 }
2466
2467 if (get_param_value(buf, sizeof(buf), "cache", str)) {
2468 if (!strcmp(buf, "off") || !strcmp(buf, "none"))
2469 cache = 0;
2470 else if (!strcmp(buf, "writethrough"))
2471 cache = 1;
2472 else if (!strcmp(buf, "writeback"))
2473 cache = 2;
2474 else {
2475 fprintf(stderr, "qemu: invalid cache option\n");
2476 return -1;
2477 }
2478 }
2479
2480 if (get_param_value(buf, sizeof(buf), "format", str)) {
2481 if (strcmp(buf, "?") == 0) {
2482 fprintf(stderr, "qemu: Supported formats:");
2483 bdrv_iterate_format(bdrv_format_print, NULL);
2484 fprintf(stderr, "\n");
2485 return -1;
2486 }
2487 drv = bdrv_find_format(buf);
2488 if (!drv) {
2489 fprintf(stderr, "qemu: '%s' invalid format\n", buf);
2490 return -1;
2491 }
2492 }
2493
2494 if (arg->file == NULL)
2495 get_param_value(file, sizeof(file), "file", str);
2496 else
2497 pstrcpy(file, sizeof(file), arg->file);
2498
2499 if (!get_param_value(serial, sizeof(serial), "serial", str))
2500 memset(serial, 0, sizeof(serial));
2501
2502 onerror = BLOCK_ERR_STOP_ENOSPC;
2503 if (get_param_value(buf, sizeof(serial), "werror", str)) {
2504 if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO) {
2505 fprintf(stderr, "werror is no supported by this format\n");
2506 return -1;
2507 }
2508 if (!strcmp(buf, "ignore"))
2509 onerror = BLOCK_ERR_IGNORE;
2510 else if (!strcmp(buf, "enospc"))
2511 onerror = BLOCK_ERR_STOP_ENOSPC;
2512 else if (!strcmp(buf, "stop"))
2513 onerror = BLOCK_ERR_STOP_ANY;
2514 else if (!strcmp(buf, "report"))
2515 onerror = BLOCK_ERR_REPORT;
2516 else {
2517 fprintf(stderr, "qemu: '%s' invalid write error action\n", buf);
2518 return -1;
2519 }
2520 }
2521
2522 /* compute bus and unit according index */
2523
2524 if (index != -1) {
2525 if (bus_id != 0 || unit_id != -1) {
2526 fprintf(stderr,
2527 "qemu: '%s' index cannot be used with bus and unit\n", str);
2528 return -1;
2529 }
2530 if (max_devs == 0)
2531 {
2532 unit_id = index;
2533 bus_id = 0;
2534 } else {
2535 unit_id = index % max_devs;
2536 bus_id = index / max_devs;
2537 }
2538 }
2539
2540 /* if user doesn't specify a unit_id,
2541 * try to find the first free
2542 */
2543
2544 if (unit_id == -1) {
2545 unit_id = 0;
2546 while (drive_get_index(type, bus_id, unit_id) != -1) {
2547 unit_id++;
2548 if (max_devs && unit_id >= max_devs) {
2549 unit_id -= max_devs;
2550 bus_id++;
2551 }
2552 }
2553 }
2554
2555 /* check unit id */
2556
2557 if (max_devs && unit_id >= max_devs) {
2558 fprintf(stderr, "qemu: '%s' unit %d too big (max is %d)\n",
2559 str, unit_id, max_devs - 1);
2560 return -1;
2561 }
2562
2563 /*
2564 * ignore multiple definitions
2565 */
2566
2567 if (drive_get_index(type, bus_id, unit_id) != -1)
2568 return -2;
2569
2570 /* init */
2571
2572 if (type == IF_IDE || type == IF_SCSI)
2573 mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
2574 if (max_devs)
2575 snprintf(buf, sizeof(buf), "%s%i%s%i",
2576 devname, bus_id, mediastr, unit_id);
2577 else
2578 snprintf(buf, sizeof(buf), "%s%s%i",
2579 devname, mediastr, unit_id);
2580 bdrv = bdrv_new(buf);
2581 drives_table_idx = drive_get_free_idx();
2582 drives_table[drives_table_idx].bdrv = bdrv;
2583 drives_table[drives_table_idx].type = type;
2584 drives_table[drives_table_idx].bus = bus_id;
2585 drives_table[drives_table_idx].unit = unit_id;
2586 drives_table[drives_table_idx].onerror = onerror;
2587 drives_table[drives_table_idx].drive_opt_idx = arg - drives_opt;
2588 strncpy(drives_table[nb_drives].serial, serial, sizeof(serial));
2589 nb_drives++;
2590
2591 switch(type) {
2592 case IF_IDE:
2593 case IF_SCSI:
2594 case IF_XEN:
2595 switch(media) {
2596 case MEDIA_DISK:
2597 if (cyls != 0) {
2598 bdrv_set_geometry_hint(bdrv, cyls, heads, secs);
2599 bdrv_set_translation_hint(bdrv, translation);
2600 }
2601 break;
2602 case MEDIA_CDROM:
2603 bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
2604 break;
2605 }
2606 break;
2607 case IF_SD:
2608 /* FIXME: This isn't really a floppy, but it's a reasonable
2609 approximation. */
2610 case IF_FLOPPY:
2611 bdrv_set_type_hint(bdrv, BDRV_TYPE_FLOPPY);
2612 break;
2613 case IF_PFLASH:
2614 case IF_MTD:
2615 case IF_VIRTIO:
2616 break;
2617 }
2618 if (!file[0])
2619 return -2;
2620 bdrv_flags = 0;
2621 if (snapshot) {
2622 bdrv_flags |= BDRV_O_SNAPSHOT;
2623 cache = 2; /* always use write-back with snapshot */
2624 }
2625 if (cache == 0) /* no caching */
2626 bdrv_flags |= BDRV_O_NOCACHE;
2627 else if (cache == 2) /* write-back */
2628 bdrv_flags |= BDRV_O_CACHE_WB;
2629 else if (cache == 3) /* not specified */
2630 bdrv_flags |= BDRV_O_CACHE_DEF;
2631 if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
2632 fprintf(stderr, "qemu: could not open disk image %s\n",
2633 file);
2634 return -1;
2635 }
2636 if (bdrv_key_required(bdrv))
2637 autostart = 0;
2638 return drives_table_idx;
2639 }
2640
2641 static void numa_add(const char *optarg)
2642 {
2643 char option[128];
2644 char *endptr;
2645 unsigned long long value, endvalue;
2646 int nodenr;
2647
2648 optarg = get_opt_name(option, 128, optarg, ',') + 1;
2649 if (!strcmp(option, "node")) {
2650 if (get_param_value(option, 128, "nodeid", optarg) == 0) {
2651 nodenr = nb_numa_nodes;
2652 } else {
2653 nodenr = strtoull(option, NULL, 10);
2654 }
2655
2656 if (get_param_value(option, 128, "mem", optarg) == 0) {
2657 node_mem[nodenr] = 0;
2658 } else {
2659 value = strtoull(option, &endptr, 0);
2660 switch (*endptr) {
2661 case 0: case 'M': case 'm':
2662 value <<= 20;
2663 break;
2664 case 'G': case 'g':
2665 value <<= 30;
2666 break;
2667 }
2668 node_mem[nodenr] = value;
2669 }
2670 if (get_param_value(option, 128, "cpus", optarg) == 0) {
2671 node_cpumask[nodenr] = 0;
2672 } else {
2673 value = strtoull(option, &endptr, 10);
2674 if (value >= 64) {
2675 value = 63;
2676 fprintf(stderr, "only 64 CPUs in NUMA mode supported.\n");
2677 } else {
2678 if (*endptr == '-') {
2679 endvalue = strtoull(endptr+1, &endptr, 10);
2680 if (endvalue >= 63) {
2681 endvalue = 62;
2682 fprintf(stderr,
2683 "only 63 CPUs in NUMA mode supported.\n");
2684 }
2685 value = (1 << (endvalue + 1)) - (1 << value);
2686 } else {
2687 value = 1 << value;
2688 }
2689 }
2690 node_cpumask[nodenr] = value;
2691 }
2692 nb_numa_nodes++;
2693 }
2694 return;
2695 }
2696
2697 /***********************************************************/
2698 /* USB devices */
2699
2700 static USBPort *used_usb_ports;
2701 static USBPort *free_usb_ports;
2702
2703 /* ??? Maybe change this to register a hub to keep track of the topology. */
2704 void qemu_register_usb_port(USBPort *port, void *opaque, int index,
2705 usb_attachfn attach)
2706 {
2707 port->opaque = opaque;
2708 port->index = index;
2709 port->attach = attach;
2710 port->next = free_usb_ports;
2711 free_usb_ports = port;
2712 }
2713
2714 int usb_device_add_dev(USBDevice *dev)
2715 {
2716 USBPort *port;
2717
2718 /* Find a USB port to add the device to. */
2719 port = free_usb_ports;
2720 if (!port->next) {
2721 USBDevice *hub;
2722
2723 /* Create a new hub and chain it on. */
2724 free_usb_ports = NULL;
2725 port->next = used_usb_ports;
2726 used_usb_ports = port;
2727
2728 hub = usb_hub_init(VM_USB_HUB_SIZE);
2729 usb_attach(port, hub);
2730 port = free_usb_ports;
2731 }
2732
2733 free_usb_ports = port->next;
2734 port->next = used_usb_ports;
2735 used_usb_ports = port;
2736 usb_attach(port, dev);
2737 return 0;
2738 }
2739
2740 static void usb_msd_password_cb(void *opaque, int err)
2741 {
2742 USBDevice *dev = opaque;
2743
2744 if (!err)
2745 usb_device_add_dev(dev);
2746 else
2747 dev->handle_destroy(dev);
2748 }
2749
2750 static int usb_device_add(const char *devname, int is_hotplug)
2751 {
2752 const char *p;
2753 USBDevice *dev;
2754
2755 if (!free_usb_ports)
2756 return -1;
2757
2758 if (strstart(devname, "host:", &p)) {
2759 dev = usb_host_device_open(p);
2760 } else if (!strcmp(devname, "mouse")) {
2761 dev = usb_mouse_init();
2762 } else if (!strcmp(devname, "tablet")) {
2763 dev = usb_tablet_init();
2764 } else if (!strcmp(devname, "keyboard")) {
2765 dev = usb_keyboard_init();
2766 } else if (strstart(devname, "disk:", &p)) {
2767 BlockDriverState *bs;
2768
2769 dev = usb_msd_init(p);
2770 if (!dev)
2771 return -1;
2772 bs = usb_msd_get_bdrv(dev);
2773 if (bdrv_key_required(bs)) {
2774 autostart = 0;
2775 if (is_hotplug) {
2776 monitor_read_bdrv_key_start(cur_mon, bs, usb_msd_password_cb,
2777 dev);
2778 return 0;
2779 }
2780 }
2781 } else if (!strcmp(devname, "wacom-tablet")) {
2782 dev = usb_wacom_init();
2783 } else if (strstart(devname, "serial:", &p)) {
2784 dev = usb_serial_init(p);
2785 #ifdef CONFIG_BRLAPI
2786 } else if (!strcmp(devname, "braille")) {
2787 dev = usb_baum_init();
2788 #endif
2789 } else if (strstart(devname, "net:", &p)) {
2790 int nic = nb_nics;
2791
2792 if (net_client_init("nic", p) < 0)
2793 return -1;
2794 nd_table[nic].model = "usb";
2795 dev = usb_net_init(&nd_table[nic]);
2796 } else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
2797 dev = usb_bt_init(devname[2] ? hci_init(p) :
2798 bt_new_hci(qemu_find_bt_vlan(0)));
2799 } else {
2800 return -1;
2801 }
2802 if (!dev)
2803 return -1;
2804
2805 return usb_device_add_dev(dev);
2806 }
2807
2808 int usb_device_del_addr(int bus_num, int addr)
2809 {
2810 USBPort *port;
2811 USBPort **lastp;
2812 USBDevice *dev;
2813
2814 if (!used_usb_ports)
2815 return -1;
2816
2817 if (bus_num != 0)
2818 return -1;
2819
2820 lastp = &used_usb_ports;
2821 port = used_usb_ports;
2822 while (port && port->dev->addr != addr) {
2823 lastp = &port->next;
2824 port = port->next;
2825 }
2826
2827 if (!port)
2828 return -1;
2829
2830 dev = port->dev;
2831 *lastp = port->next;
2832 usb_attach(port, NULL);
2833 dev->handle_destroy(dev);
2834 port->next = free_usb_ports;
2835 free_usb_ports = port;
2836 return 0;
2837 }
2838
2839 static int usb_device_del(const char *devname)
2840 {
2841 int bus_num, addr;
2842 const char *p;
2843
2844 if (strstart(devname, "host:", &p))
2845 return usb_host_device_close(p);
2846
2847 if (!used_usb_ports)
2848 return -1;
2849
2850 p = strchr(devname, '.');
2851 if (!p)
2852 return -1;
2853 bus_num = strtoul(devname, NULL, 0);
2854 addr = strtoul(p + 1, NULL, 0);
2855
2856 return usb_device_del_addr(bus_num, addr);
2857 }
2858
2859 void do_usb_add(Monitor *mon, const char *devname)
2860 {
2861 usb_device_add(devname, 1);
2862 }
2863
2864 void do_usb_del(Monitor *mon, const char *devname)
2865 {
2866 usb_device_del(devname);
2867 }
2868
2869 void usb_info(Monitor *mon)
2870 {
2871 USBDevice *dev;
2872 USBPort *port;
2873 const char *speed_str;
2874
2875 if (!usb_enabled) {
2876 monitor_printf(mon, "USB support not enabled\n");
2877 return;
2878 }
2879
2880 for (port = used_usb_ports; port; port = port->next) {
2881 dev = port->dev;
2882 if (!dev)
2883 continue;
2884 switch(dev->speed) {
2885 case USB_SPEED_LOW:
2886 speed_str = "1.5";
2887 break;
2888 case USB_SPEED_FULL:
2889 speed_str = "12";
2890 break;
2891 case USB_SPEED_HIGH:
2892 speed_str = "480";
2893 break;
2894 default:
2895 speed_str = "?";
2896 break;
2897 }
2898 monitor_printf(mon, " Device %d.%d, Speed %s Mb/s, Product %s\n",
2899 0, dev->addr, speed_str, dev->devname);
2900 }
2901 }
2902
2903 /***********************************************************/
2904 /* PCMCIA/Cardbus */
2905
2906 static struct pcmcia_socket_entry_s {
2907 struct pcmcia_socket_s *socket;
2908 struct pcmcia_socket_entry_s *next;
2909 } *pcmcia_sockets = 0;
2910
2911 void pcmcia_socket_register(struct pcmcia_socket_s *socket)
2912 {
2913 struct pcmcia_socket_entry_s *entry;
2914
2915 entry = qemu_malloc(sizeof(struct pcmcia_socket_entry_s));
2916 entry->socket = socket;
2917 entry->next = pcmcia_sockets;
2918 pcmcia_sockets = entry;
2919 }
2920
2921 void pcmcia_socket_unregister(struct pcmcia_socket_s *socket)
2922 {
2923 struct pcmcia_socket_entry_s *entry, **ptr;
2924
2925 ptr = &pcmcia_sockets;
2926 for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
2927 if (entry->socket == socket) {
2928 *ptr = entry->next;
2929 qemu_free(entry);
2930 }
2931 }
2932
2933 void pcmcia_info(Monitor *mon)
2934 {
2935 struct pcmcia_socket_entry_s *iter;
2936
2937 if (!pcmcia_sockets)
2938 monitor_printf(mon, "No PCMCIA sockets\n");
2939
2940 for (iter = pcmcia_sockets; iter; iter = iter->next)
2941 monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
2942 iter->socket->attached ? iter->socket->card_string :
2943 "Empty");
2944 }
2945
2946 /***********************************************************/
2947 /* register display */
2948
2949 struct DisplayAllocator default_allocator = {
2950 defaultallocator_create_displaysurface,
2951 defaultallocator_resize_displaysurface,
2952 defaultallocator_free_displaysurface
2953 };
2954
2955 void register_displaystate(DisplayState *ds)
2956 {
2957 DisplayState **s;
2958 s = &display_state;
2959 while (*s != NULL)
2960 s = &(*s)->next;
2961 ds->next = NULL;
2962 *s = ds;
2963 }
2964
2965 DisplayState *get_displaystate(void)
2966 {
2967 return display_state;
2968 }
2969
2970 DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da)
2971 {
2972 if(ds->allocator == &default_allocator) ds->allocator = da;
2973 return ds->allocator;
2974 }
2975
2976 /* dumb display */
2977
2978 static void dumb_display_init(void)
2979 {
2980 DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
2981 ds->allocator = &default_allocator;
2982 ds->surface = qemu_create_displaysurface(ds, 640, 480);
2983 register_displaystate(ds);
2984 }
2985
2986 /***********************************************************/
2987 /* I/O handling */
2988
2989 typedef struct IOHandlerRecord {
2990 int fd;
2991 IOCanRWHandler *fd_read_poll;
2992 IOHandler *fd_read;
2993 IOHandler *fd_write;
2994 int deleted;
2995 void *opaque;
2996 /* temporary data */
2997 struct pollfd *ufd;
2998 struct IOHandlerRecord *next;
2999 } IOHandlerRecord;
3000
3001 static IOHandlerRecord *first_io_handler;
3002
3003 /* XXX: fd_read_poll should be suppressed, but an API change is
3004 necessary in the character devices to suppress fd_can_read(). */
3005 int qemu_set_fd_handler2(int fd,
3006 IOCanRWHandler *fd_read_poll,
3007 IOHandler *fd_read,
3008 IOHandler *fd_write,
3009 void *opaque)
3010 {
3011 IOHandlerRecord **pioh, *ioh;
3012
3013 if (!fd_read && !fd_write) {
3014 pioh = &first_io_handler;
3015 for(;;) {
3016 ioh = *pioh;
3017 if (ioh == NULL)
3018 break;
3019 if (ioh->fd == fd) {
3020 ioh->deleted = 1;
3021 break;
3022 }
3023 pioh = &ioh->next;
3024 }
3025 } else {
3026 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3027 if (ioh->fd == fd)
3028 goto found;
3029 }
3030 ioh = qemu_mallocz(sizeof(IOHandlerRecord));
3031 ioh->next = first_io_handler;
3032 first_io_handler = ioh;
3033 found:
3034 ioh->fd = fd;
3035 ioh->fd_read_poll = fd_read_poll;
3036 ioh->fd_read = fd_read;
3037 ioh->fd_write = fd_write;
3038 ioh->opaque = opaque;
3039 ioh->deleted = 0;
3040 }
3041 return 0;
3042 }
3043
3044 int qemu_set_fd_handler(int fd,
3045 IOHandler *fd_read,
3046 IOHandler *fd_write,
3047 void *opaque)
3048 {
3049 return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
3050 }
3051
3052 #ifdef _WIN32
3053 /***********************************************************/
3054 /* Polling handling */
3055
3056 typedef struct PollingEntry {
3057 PollingFunc *func;
3058 void *opaque;
3059 struct PollingEntry *next;
3060 } PollingEntry;
3061
3062 static PollingEntry *first_polling_entry;
3063
3064 int qemu_add_polling_cb(PollingFunc *func, void *opaque)
3065 {
3066 PollingEntry **ppe, *pe;
3067 pe = qemu_mallocz(sizeof(PollingEntry));
3068 pe->func = func;
3069 pe->opaque = opaque;
3070 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next);
3071 *ppe = pe;
3072 return 0;
3073 }
3074
3075 void qemu_del_polling_cb(PollingFunc *func, void *opaque)
3076 {
3077 PollingEntry **ppe, *pe;
3078 for(ppe = &first_polling_entry; *ppe != NULL; ppe = &(*ppe)->next) {
3079 pe = *ppe;
3080 if (pe->func == func && pe->opaque == opaque) {
3081 *ppe = pe->next;
3082 qemu_free(pe);
3083 break;
3084 }
3085 }
3086 }
3087
3088 /***********************************************************/
3089 /* Wait objects support */
3090 typedef struct WaitObjects {
3091 int num;
3092 HANDLE events[MAXIMUM_WAIT_OBJECTS + 1];
3093 WaitObjectFunc *func[MAXIMUM_WAIT_OBJECTS + 1];
3094 void *opaque[MAXIMUM_WAIT_OBJECTS + 1];
3095 } WaitObjects;
3096
3097 static WaitObjects wait_objects = {0};
3098
3099 int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3100 {
3101 WaitObjects *w = &wait_objects;
3102
3103 if (w->num >= MAXIMUM_WAIT_OBJECTS)
3104 return -1;
3105 w->events[w->num] = handle;
3106 w->func[w->num] = func;
3107 w->opaque[w->num] = opaque;
3108 w->num++;
3109 return 0;
3110 }
3111
3112 void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
3113 {
3114 int i, found;
3115 WaitObjects *w = &wait_objects;
3116
3117 found = 0;
3118 for (i = 0; i < w->num; i++) {
3119 if (w->events[i] == handle)
3120 found = 1;
3121 if (found) {
3122 w->events[i] = w->events[i + 1];
3123 w->func[i] = w->func[i + 1];
3124 w->opaque[i] = w->opaque[i + 1];
3125 }
3126 }
3127 if (found)
3128 w->num--;
3129 }
3130 #endif
3131
3132 /***********************************************************/
3133 /* ram save/restore */
3134
3135 static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
3136 {
3137 int v;
3138
3139 v = qemu_get_byte(f);
3140 switch(v) {
3141 case 0:
3142 if (qemu_get_buffer(f, buf, len) != len)
3143 return -EIO;
3144 break;
3145 case 1:
3146 v = qemu_get_byte(f);
3147 memset(buf, v, len);
3148 break;
3149 default:
3150 return -EINVAL;
3151 }
3152
3153 if (qemu_file_has_error(f))
3154 return -EIO;
3155
3156 return 0;
3157 }
3158
3159 static int ram_load_v1(QEMUFile *f, void *opaque)
3160 {
3161 int ret;
3162 ram_addr_t i;
3163
3164 if (qemu_get_be32(f) != last_ram_offset)
3165 return -EINVAL;
3166 for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
3167 ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
3168 if (ret)
3169 return ret;
3170 }
3171 return 0;
3172 }
3173
3174 #define BDRV_HASH_BLOCK_SIZE 1024
3175 #define IOBUF_SIZE 4096
3176 #define RAM_CBLOCK_MAGIC 0xfabe
3177
3178 typedef struct RamDecompressState {
3179 z_stream zstream;
3180 QEMUFile *f;
3181 uint8_t buf[IOBUF_SIZE];
3182 } RamDecompressState;
3183
3184 static int ram_decompress_open(RamDecompressState *s, QEMUFile *f)
3185 {
3186 int ret;
3187 memset(s, 0, sizeof(*s));
3188 s->f = f;
3189 ret = inflateInit(&s->zstream);
3190 if (ret != Z_OK)
3191 return -1;
3192 return 0;
3193 }
3194
3195 static int ram_decompress_buf(RamDecompressState *s, uint8_t *buf, int len)
3196 {
3197 int ret, clen;
3198
3199 s->zstream.avail_out = len;
3200 s->zstream.next_out = buf;
3201 while (s->zstream.avail_out > 0) {
3202 if (s->zstream.avail_in == 0) {
3203 if (qemu_get_be16(s->f) != RAM_CBLOCK_MAGIC)
3204 return -1;
3205 clen = qemu_get_be16(s->f);
3206 if (clen > IOBUF_SIZE)
3207 return -1;
3208 qemu_get_buffer(s->f, s->buf, clen);
3209 s->zstream.avail_in = clen;
3210 s->zstream.next_in = s->buf;
3211 }
3212 ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
3213 if (ret != Z_OK && ret != Z_STREAM_END) {
3214 return -1;
3215 }
3216 }
3217 return 0;
3218 }
3219
3220 static void ram_decompress_close(RamDecompressState *s)
3221 {
3222 inflateEnd(&s->zstream);
3223 }
3224
3225 #define RAM_SAVE_FLAG_FULL 0x01
3226 #define RAM_SAVE_FLAG_COMPRESS 0x02
3227 #define RAM_SAVE_FLAG_MEM_SIZE 0x04
3228 #define RAM_SAVE_FLAG_PAGE 0x08
3229 #define RAM_SAVE_FLAG_EOS 0x10
3230
3231 static int is_dup_page(uint8_t *page, uint8_t ch)
3232 {
3233 uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
3234 uint32_t *array = (uint32_t *)page;
3235 int i;
3236
3237 for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
3238 if (array[i] != val)
3239 return 0;
3240 }
3241
3242 return 1;
3243 }
3244
3245 static int ram_save_block(QEMUFile *f)
3246 {
3247 static ram_addr_t current_addr = 0;
3248 ram_addr_t saved_addr = current_addr;
3249 ram_addr_t addr = 0;
3250 int found = 0;
3251
3252 while (addr < last_ram_offset) {
3253 if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3254 uint8_t *p;
3255
3256 cpu_physical_memory_reset_dirty(current_addr,
3257 current_addr + TARGET_PAGE_SIZE,
3258 MIGRATION_DIRTY_FLAG);
3259
3260 p = qemu_get_ram_ptr(current_addr);
3261
3262 if (is_dup_page(p, *p)) {
3263 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
3264 qemu_put_byte(f, *p);
3265 } else {
3266 qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
3267 qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
3268 }
3269
3270 found = 1;
3271 break;
3272 }
3273 addr += TARGET_PAGE_SIZE;
3274 current_addr = (saved_addr + addr) % last_ram_offset;
3275 }
3276
3277 return found;
3278 }
3279
3280 static ram_addr_t ram_save_threshold = 10;
3281
3282 static ram_addr_t ram_save_remaining(void)
3283 {
3284 ram_addr_t addr;
3285 ram_addr_t count = 0;
3286
3287 for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3288 if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3289 count++;
3290 }
3291
3292 return count;
3293 }
3294
3295 static int ram_save_live(QEMUFile *f, int stage, void *opaque)
3296 {
3297 ram_addr_t addr;
3298
3299 if (stage == 1) {
3300 /* Make sure all dirty bits are set */
3301 for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3302 if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3303 cpu_physical_memory_set_dirty(addr);
3304 }
3305
3306 /* Enable dirty memory tracking */
3307 cpu_physical_memory_set_dirty_tracking(1);
3308
3309 qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3310 }
3311
3312 while (!qemu_file_rate_limit(f)) {
3313 int ret;
3314
3315 ret = ram_save_block(f);
3316 if (ret == 0) /* no more blocks */
3317 break;
3318 }
3319
3320 /* try transferring iterative blocks of memory */
3321
3322 if (stage == 3) {
3323
3324 /* flush all remaining blocks regardless of rate limiting */
3325 while (ram_save_block(f) != 0);
3326 cpu_physical_memory_set_dirty_tracking(0);
3327 }
3328
3329 qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3330
3331 return (stage == 2) && (ram_save_remaining() < ram_save_threshold);
3332 }
3333
3334 static int ram_load_dead(QEMUFile *f, void *opaque)
3335 {
3336 RamDecompressState s1, *s = &s1;
3337 uint8_t buf[10];
3338 ram_addr_t i;
3339
3340 if (ram_decompress_open(s, f) < 0)
3341 return -EINVAL;
3342 for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3343 if (ram_decompress_buf(s, buf, 1) < 0) {
3344 fprintf(stderr, "Error while reading ram block header\n");
3345 goto error;
3346 }
3347 if (buf[0] == 0) {
3348 if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
3349 BDRV_HASH_BLOCK_SIZE) < 0) {
3350 fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
3351 goto error;
3352 }
3353 } else {
3354 error:
3355 printf("Error block header\n");
3356 return -EINVAL;
3357 }
3358 }
3359 ram_decompress_close(s);
3360
3361 return 0;
3362 }
3363
3364 static int ram_load(QEMUFile *f, void *opaque, int version_id)
3365 {
3366 ram_addr_t addr;
3367 int flags;
3368
3369 if (version_id == 1)
3370 return ram_load_v1(f, opaque);
3371
3372 if (version_id == 2) {
3373 if (qemu_get_be32(f) != last_ram_offset)
3374 return -EINVAL;
3375 return ram_load_dead(f, opaque);
3376 }
3377
3378 if (version_id != 3)
3379 return -EINVAL;
3380
3381 do {
3382 addr = qemu_get_be64(f);
3383
3384 flags = addr & ~TARGET_PAGE_MASK;
3385 addr &= TARGET_PAGE_MASK;
3386
3387 if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3388 if (addr != last_ram_offset)
3389 return -EINVAL;
3390 }
3391
3392 if (flags & RAM_SAVE_FLAG_FULL) {
3393 if (ram_load_dead(f, opaque) < 0)
3394 return -EINVAL;
3395 }
3396
3397 if (flags & RAM_SAVE_FLAG_COMPRESS) {
3398 uint8_t ch = qemu_get_byte(f);
3399 memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
3400 } else if (flags & RAM_SAVE_FLAG_PAGE)
3401 qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
3402 } while (!(flags & RAM_SAVE_FLAG_EOS));
3403
3404 return 0;
3405 }
3406
3407 void qemu_service_io(void)
3408 {
3409 CPUState *env = cpu_single_env;
3410 if (env) {
3411 cpu_exit(env);
3412 #ifdef CONFIG_KQEMU
3413 if (env->kqemu_enabled) {
3414 kqemu_cpu_interrupt(env);
3415 }
3416 #endif
3417 }
3418 }
3419
3420 /***********************************************************/
3421 /* bottom halves (can be seen as timers which expire ASAP) */
3422
3423 struct QEMUBH {
3424 QEMUBHFunc *cb;
3425 void *opaque;
3426 int scheduled;
3427 int idle;
3428 int deleted;
3429 QEMUBH *next;
3430 };
3431
3432 static QEMUBH *first_bh = NULL;
3433
3434 QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
3435 {
3436 QEMUBH *bh;
3437 bh = qemu_mallocz(sizeof(QEMUBH));
3438 bh->cb = cb;
3439 bh->opaque = opaque;
3440 bh->next = first_bh;
3441 first_bh = bh;
3442 return bh;
3443 }
3444
3445 int qemu_bh_poll(void)
3446 {
3447 QEMUBH *bh, **bhp;
3448 int ret;
3449
3450 ret = 0;
3451 for (bh = first_bh; bh; bh = bh->next) {
3452 if (!bh->deleted && bh->scheduled) {
3453 bh->scheduled = 0;
3454 if (!bh->idle)
3455 ret = 1;
3456 bh->idle = 0;
3457 bh->cb(bh->opaque);
3458 }
3459 }
3460
3461 /* remove deleted bhs */
3462 bhp = &first_bh;
3463 while (*bhp) {
3464 bh = *bhp;
3465 if (bh->deleted) {
3466 *bhp = bh->next;
3467 qemu_free(bh);
3468 } else
3469 bhp = &bh->next;
3470 }
3471
3472 return ret;
3473 }
3474
3475 void qemu_bh_schedule_idle(QEMUBH *bh)
3476 {
3477 if (bh->scheduled)
3478 return;
3479 bh->scheduled = 1;
3480 bh->idle = 1;
3481 }
3482
3483 void qemu_bh_schedule(QEMUBH *bh)
3484 {
3485 CPUState *env = cpu_single_env;
3486 if (bh->scheduled)
3487 return;
3488 bh->scheduled = 1;
3489 bh->idle = 0;
3490 /* stop the currently executing CPU to execute the BH ASAP */
3491 if (env) {
3492 cpu_exit(env);
3493 }
3494 }
3495
3496 void qemu_bh_cancel(QEMUBH *bh)
3497 {
3498 bh->scheduled = 0;
3499 }
3500
3501 void qemu_bh_delete(QEMUBH *bh)
3502 {
3503 bh->scheduled = 0;
3504 bh->deleted = 1;
3505 }
3506
3507 static void qemu_bh_update_timeout(int *timeout)
3508 {
3509 QEMUBH *bh;
3510
3511 for (bh = first_bh; bh; bh = bh->next) {
3512 if (!bh->deleted && bh->scheduled) {
3513 if (bh->idle) {
3514 /* idle bottom halves will be polled at least
3515 * every 10ms */
3516 *timeout = MIN(10, *timeout);
3517 } else {
3518 /* non-idle bottom halves will be executed
3519 * immediately */
3520 *timeout = 0;
3521 break;
3522 }
3523 }
3524 }
3525 }
3526
3527 /***********************************************************/
3528 /* machine registration */
3529
3530 static QEMUMachine *first_machine = NULL;
3531 QEMUMachine *current_machine = NULL;
3532
3533 int qemu_register_machine(QEMUMachine *m)
3534 {
3535 QEMUMachine **pm;
3536 pm = &first_machine;
3537 while (*pm != NULL)
3538 pm = &(*pm)->next;
3539 m->next = NULL;
3540 *pm = m;
3541 return 0;
3542 }
3543
3544 static QEMUMachine *find_machine(const char *name)
3545 {
3546 QEMUMachine *m;
3547
3548 for(m = first_machine; m != NULL; m = m->next) {
3549 if (!strcmp(m->name, name))
3550 return m;
3551 }
3552 return NULL;
3553 }
3554
3555 /***********************************************************/
3556 /* main execution loop */
3557
3558 static void gui_update(void *opaque)
3559 {
3560 uint64_t interval = GUI_REFRESH_INTERVAL;
3561 DisplayState *ds = opaque;
3562 DisplayChangeListener *dcl = ds->listeners;
3563
3564 dpy_refresh(ds);
3565
3566 while (dcl != NULL) {
3567 if (dcl->gui_timer_interval &&
3568 dcl->gui_timer_interval < interval)
3569 interval = dcl->gui_timer_interval;
3570 dcl = dcl->next;
3571 }
3572 qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
3573 }
3574
3575 static void nographic_update(void *opaque)
3576 {
3577 uint64_t interval = GUI_REFRESH_INTERVAL;
3578
3579 qemu_mod_timer(nographic_timer, interval + qemu_get_clock(rt_clock));
3580 }
3581
3582 struct vm_change_state_entry {
3583 VMChangeStateHandler *cb;
3584 void *opaque;
3585 LIST_ENTRY (vm_change_state_entry) entries;
3586 };
3587
3588 static LIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
3589
3590 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
3591 void *opaque)
3592 {
3593 VMChangeStateEntry *e;
3594
3595 e = qemu_mallocz(sizeof (*e));
3596
3597 e->cb = cb;
3598 e->opaque = opaque;
3599 LIST_INSERT_HEAD(&vm_change_state_head, e, entries);
3600 return e;
3601 }
3602
3603 void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
3604 {
3605 LIST_REMOVE (e, entries);
3606 qemu_free (e);
3607 }
3608
3609 static void vm_state_notify(int running, int reason)
3610 {
3611 VMChangeStateEntry *e;
3612
3613 for (e = vm_change_state_head.lh_first; e; e = e->entries.le_next) {
3614 e->cb(e->opaque, running, reason);
3615 }
3616 }
3617
3618 void vm_start(void)
3619 {
3620 if (!vm_running) {
3621 cpu_enable_ticks();
3622 vm_running = 1;
3623 vm_state_notify(1, 0);
3624 qemu_rearm_alarm_timer(alarm_timer);
3625 }
3626 }
3627
3628 void vm_stop(int reason)
3629 {
3630 if (vm_running) {
3631 cpu_disable_ticks();
3632 vm_running = 0;
3633 vm_state_notify(0, reason);
3634 }
3635 }
3636
3637 /* reset/shutdown handler */
3638
3639 typedef struct QEMUResetEntry {
3640 QEMUResetHandler *func;
3641 void *opaque;
3642 struct QEMUResetEntry *next;
3643 } QEMUResetEntry;
3644
3645 static QEMUResetEntry *first_reset_entry;
3646 static int reset_requested;
3647 static int shutdown_requested;
3648 static int powerdown_requested;
3649
3650 int qemu_shutdown_requested(void)
3651 {
3652 int r = shutdown_requested;
3653 shutdown_requested = 0;
3654 return r;
3655 }
3656
3657 int qemu_reset_requested(void)
3658 {
3659 int r = reset_requested;
3660 reset_requested = 0;
3661 return r;
3662 }
3663
3664 int qemu_powerdown_requested(void)
3665 {
3666 int r = powerdown_requested;
3667 powerdown_requested = 0;
3668 return r;
3669 }
3670
3671 void qemu_register_reset(QEMUResetHandler *func, void *opaque)
3672 {
3673 QEMUResetEntry **pre, *re;
3674
3675 pre = &first_reset_entry;
3676 while (*pre != NULL)
3677 pre = &(*pre)->next;
3678 re = qemu_mallocz(sizeof(QEMUResetEntry));
3679 re->func = func;
3680 re->opaque = opaque;
3681 re->next = NULL;
3682 *pre = re;
3683 }
3684
3685 void qemu_system_reset(void)
3686 {
3687 QEMUResetEntry *re;
3688
3689 /* reset all devices */
3690 for(re = first_reset_entry; re != NULL; re = re->next) {
3691 re->func(re->opaque);
3692 }
3693 if (kvm_enabled())
3694 kvm_sync_vcpus();
3695 }
3696
3697 void qemu_system_reset_request(void)
3698 {
3699 if (no_reboot) {
3700 shutdown_requested = 1;
3701 } else {
3702 reset_requested = 1;
3703 }
3704 if (cpu_single_env)
3705 cpu_exit(cpu_single_env);
3706 }
3707
3708 void qemu_system_shutdown_request(void)
3709 {
3710 shutdown_requested = 1;
3711 if (cpu_single_env)
3712 cpu_exit(cpu_single_env);
3713 }
3714
3715 void qemu_system_powerdown_request(void)
3716 {
3717 powerdown_requested = 1;
3718 if (cpu_single_env)
3719 cpu_exit(cpu_single_env);
3720 }
3721
3722 #ifdef _WIN32
3723 static void host_main_loop_wait(int *timeout)
3724 {
3725 int ret, ret2, i;
3726 PollingEntry *pe;
3727
3728
3729 /* XXX: need to suppress polling by better using win32 events */
3730 ret = 0;
3731 for(pe = first_polling_entry; pe != NULL; pe = pe->next) {
3732 ret |= pe->func(pe->opaque);
3733 }
3734 if (ret == 0) {
3735 int err;
3736 WaitObjects *w = &wait_objects;
3737
3738 ret = WaitForMultipleObjects(w->num, w->events, FALSE, *timeout);
3739 if (WAIT_OBJECT_0 + 0 <= ret && ret <= WAIT_OBJECT_0 + w->num - 1) {
3740 if (w->func[ret - WAIT_OBJECT_0])
3741 w->func[ret - WAIT_OBJECT_0](w->opaque[ret - WAIT_OBJECT_0]);
3742
3743 /* Check for additional signaled events */
3744 for(i = (ret - WAIT_OBJECT_0 + 1); i < w->num; i++) {
3745
3746 /* Check if event is signaled */
3747 ret2 = WaitForSingleObject(w->events[i], 0);
3748 if(ret2 == WAIT_OBJECT_0) {
3749 if (w->func[i])
3750 w->func[i](w->opaque[i]);
3751 } else if (ret2 == WAIT_TIMEOUT) {
3752 } else {
3753 err = GetLastError();
3754 fprintf(stderr, "WaitForSingleObject error %d %d\n", i, err);
3755 }
3756 }
3757 } else if (ret == WAIT_TIMEOUT) {
3758 } else {
3759 err = GetLastError();
3760 fprintf(stderr, "WaitForMultipleObjects error %d %d\n", ret, err);
3761 }
3762 }
3763
3764 *timeout = 0;
3765 }
3766 #else
3767 static void host_main_loop_wait(int *timeout)
3768 {
3769 }
3770 #endif
3771
3772 void main_loop_wait(int timeout)
3773 {
3774 IOHandlerRecord *ioh;
3775 fd_set rfds, wfds, xfds;
3776 int ret, nfds;
3777 struct timeval tv;
3778
3779 qemu_bh_update_timeout(&timeout);
3780
3781 host_main_loop_wait(&timeout);
3782
3783 /* poll any events */
3784 /* XXX: separate device handlers from system ones */
3785 nfds = -1;
3786 FD_ZERO(&rfds);
3787 FD_ZERO(&wfds);
3788 FD_ZERO(&xfds);
3789 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3790 if (ioh->deleted)
3791 continue;
3792 if (ioh->fd_read &&
3793 (!ioh->fd_read_poll ||
3794 ioh->fd_read_poll(ioh->opaque) != 0)) {
3795 FD_SET(ioh->fd, &rfds);
3796 if (ioh->fd > nfds)
3797 nfds = ioh->fd;
3798 }
3799 if (ioh->fd_write) {
3800 FD_SET(ioh->fd, &wfds);
3801 if (ioh->fd > nfds)
3802 nfds = ioh->fd;
3803 }
3804 }
3805
3806 tv.tv_sec = timeout / 1000;
3807 tv.tv_usec = (timeout % 1000) * 1000;
3808
3809 #if defined(CONFIG_SLIRP)
3810 if (slirp_is_inited()) {
3811 slirp_select_fill(&nfds, &rfds, &wfds, &xfds);
3812 }
3813 #endif
3814 ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv);
3815 if (ret > 0) {
3816 IOHandlerRecord **pioh;
3817
3818 for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
3819 if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
3820 ioh->fd_read(ioh->opaque);
3821 }
3822 if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
3823 ioh->fd_write(ioh->opaque);
3824 }
3825 }
3826
3827 /* remove deleted IO handlers */
3828 pioh = &first_io_handler;
3829 while (*pioh) {
3830 ioh = *pioh;
3831 if (ioh->deleted) {
3832 *pioh = ioh->next;
3833 qemu_free(ioh);
3834 } else
3835 pioh = &ioh->next;
3836 }
3837 }
3838 #if defined(CONFIG_SLIRP)
3839 if (slirp_is_inited()) {
3840 if (ret < 0) {
3841 FD_ZERO(&rfds);
3842 FD_ZERO(&wfds);
3843 FD_ZERO(&xfds);
3844 }
3845 slirp_select_poll(&rfds, &wfds, &xfds);
3846 }
3847 #endif
3848
3849 /* vm time timers */
3850 if (vm_running && likely(!(cur_cpu->singlestep_enabled & SSTEP_NOTIMER)))
3851 qemu_run_timers(&active_timers[QEMU_TIMER_VIRTUAL],
3852 qemu_get_clock(vm_clock));
3853
3854 /* real time timers */
3855 qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
3856 qemu_get_clock(rt_clock));
3857
3858 /* Check bottom-halves last in case any of the earlier events triggered
3859 them. */
3860 qemu_bh_poll();
3861
3862 }
3863
3864 static int main_loop(void)
3865 {
3866 int ret, timeout;
3867 #ifdef CONFIG_PROFILER
3868 int64_t ti;
3869 #endif
3870 CPUState *env;
3871
3872 cur_cpu = first_cpu;
3873 next_cpu = cur_cpu->next_cpu ?: first_cpu;
3874 for(;;) {
3875 if (vm_running) {
3876
3877 for(;;) {
3878 /* get next cpu */
3879 env = next_cpu;
3880 #ifdef CONFIG_PROFILER
3881 ti = profile_getclock();
3882 #endif
3883 if (use_icount) {
3884 int64_t count;
3885 int decr;
3886 qemu_icount -= (env->icount_decr.u16.low + env->icount_extra);
3887 env->icount_decr.u16.low = 0;
3888 env->icount_extra = 0;
3889 count = qemu_next_deadline();
3890 count = (count + (1 << icount_time_shift) - 1)
3891 >> icount_time_shift;
3892 qemu_icount += count;
3893 decr = (count > 0xffff) ? 0xffff : count;
3894 count -= decr;
3895 env->icount_decr.u16.low = decr;
3896 env->icount_extra = count;
3897 }
3898 ret = cpu_exec(env);
3899 #ifdef CONFIG_PROFILER
3900 qemu_time += profile_getclock() - ti;
3901 #endif
3902 if (use_icount) {
3903 /* Fold pending instructions back into the
3904 instruction counter, and clear the interrupt flag. */
3905 qemu_icount -= (env->icount_decr.u16.low
3906 + env->icount_extra);
3907 env->icount_decr.u32 = 0;
3908 env->icount_extra = 0;
3909 }
3910 next_cpu = env->next_cpu ?: first_cpu;
3911 if (event_pending && likely(ret != EXCP_DEBUG)) {
3912 ret = EXCP_INTERRUPT;
3913 event_pending = 0;
3914 break;
3915 }
3916 if (ret == EXCP_HLT) {
3917 /* Give the next CPU a chance to run. */
3918 cur_cpu = env;
3919 continue;
3920 }
3921 if (ret != EXCP_HALTED)
3922 break;
3923 /* all CPUs are halted ? */
3924 if (env == cur_cpu)
3925 break;
3926 }
3927 cur_cpu = env;
3928
3929 if (shutdown_requested) {
3930 ret = EXCP_INTERRUPT;
3931 if (no_shutdown) {
3932 vm_stop(0);
3933 no_shutdown = 0;
3934 }
3935 else
3936 break;
3937 }
3938 if (reset_requested) {
3939 reset_requested = 0;
3940 qemu_system_reset();
3941 ret = EXCP_INTERRUPT;
3942 }
3943 if (powerdown_requested) {
3944 powerdown_requested = 0;
3945 qemu_system_powerdown();
3946 ret = EXCP_INTERRUPT;
3947 }
3948 if (unlikely(ret == EXCP_DEBUG)) {
3949 gdb_set_stop_cpu(cur_cpu);
3950 vm_stop(EXCP_DEBUG);
3951 }
3952 /* If all cpus are halted then wait until the next IRQ */
3953 /* XXX: use timeout computed from timers */
3954 if (ret == EXCP_HALTED) {
3955 if (use_icount) {
3956 int64_t add;
3957 int64_t delta;
3958 /* Advance virtual time to the next event. */
3959 if (use_icount == 1) {
3960 /* When not using an adaptive execution frequency
3961 we tend to get badly out of sync with real time,
3962 so just delay for a reasonable amount of time. */
3963 delta = 0;
3964 } else {
3965 delta = cpu_get_icount() - cpu_get_clock();
3966 }
3967 if (delta > 0) {
3968 /* If virtual time is ahead of real time then just
3969 wait for IO. */
3970 timeout = (delta / 1000000) + 1;
3971 } else {
3972 /* Wait for either IO to occur or the next
3973 timer event. */
3974 add = qemu_next_deadline();
3975 /* We advance the timer before checking for IO.
3976 Limit the amount we advance so that early IO
3977 activity won't get the guest too far ahead. */
3978 if (add > 10000000)
3979 add = 10000000;
3980 delta += add;
3981 add = (add + (1 << icount_time_shift) - 1)
3982 >> icount_time_shift;
3983 qemu_icount += add;
3984 timeout = delta / 1000000;
3985 if (timeout < 0)
3986 timeout = 0;
3987 }
3988 } else {
3989 timeout = 5000;
3990 }
3991 } else {
3992 timeout = 0;
3993 }
3994 } else {
3995 if (shutdown_requested) {
3996 ret = EXCP_INTERRUPT;
3997 break;
3998 }
3999 timeout = 5000;
4000 }
4001 #ifdef CONFIG_PROFILER
4002 ti = profile_getclock();
4003 #endif
4004 main_loop_wait(timeout);
4005 #ifdef CONFIG_PROFILER
4006 dev_time += profile_getclock() - ti;
4007 #endif
4008 }
4009 cpu_disable_ticks();
4010 return ret;
4011 }
4012
4013 static void version(void)
4014 {
4015 printf("QEMU PC emulator version " QEMU_VERSION QEMU_PKGVERSION ", Copyright (c) 2003-2008 Fabrice Bellard\n");
4016 }
4017
4018 static void help(int exitcode)
4019 {
4020 version();
4021 printf("usage: %s [options] [disk_image]\n"
4022 "\n"
4023 "'disk_image' is a raw hard image image for IDE hard disk 0\n"
4024 "\n"
4025 #define DEF(option, opt_arg, opt_enum, opt_help) \
4026 opt_help
4027 #define DEFHEADING(text) stringify(text) "\n"
4028 #include "qemu-options.h"
4029 #undef DEF
4030 #undef DEFHEADING
4031 #undef GEN_DOCS
4032 "\n"
4033 "During emulation, the following keys are useful:\n"
4034 "ctrl-alt-f toggle full screen\n"
4035 "ctrl-alt-n switch to virtual console 'n'\n"
4036 "ctrl-alt toggle mouse and keyboard grab\n"
4037 "\n"
4038 "When using -nographic, press 'ctrl-a h' to get some help.\n"
4039 ,
4040 "qemu",
4041 DEFAULT_RAM_SIZE,
4042 #ifndef _WIN32
4043 DEFAULT_NETWORK_SCRIPT,
4044 DEFAULT_NETWORK_DOWN_SCRIPT,
4045 #endif
4046 DEFAULT_GDBSTUB_PORT,
4047 "/tmp/qemu.log");
4048 exit(exitcode);
4049 }
4050
4051 #define HAS_ARG 0x0001
4052
4053 enum {
4054 #define DEF(option, opt_arg, opt_enum, opt_help) \
4055 opt_enum,
4056 #define DEFHEADING(text)
4057 #include "qemu-options.h"
4058 #undef DEF
4059 #undef DEFHEADING
4060 #undef GEN_DOCS
4061 };
4062
4063 typedef struct QEMUOption {
4064 const char *name;
4065 int flags;
4066 int index;
4067 } QEMUOption;
4068
4069 static const QEMUOption qemu_options[] = {
4070 { "h", 0, QEMU_OPTION_h },
4071 #define DEF(option, opt_arg, opt_enum, opt_help) \
4072 { option, opt_arg, opt_enum },
4073 #define DEFHEADING(text)
4074 #include "qemu-options.h"
4075 #undef DEF
4076 #undef DEFHEADING
4077 #undef GEN_DOCS
4078 { NULL },
4079 };
4080
4081 #ifdef HAS_AUDIO
4082 struct soundhw soundhw[] = {
4083 #ifdef HAS_AUDIO_CHOICE
4084 #if defined(TARGET_I386) || defined(TARGET_MIPS)
4085 {
4086 "pcspk",
4087 "PC speaker",
4088 0,
4089 1,
4090 { .init_isa = pcspk_audio_init }
4091 },
4092 #endif
4093
4094 #ifdef CONFIG_SB16
4095 {
4096 "sb16",
4097 "Creative Sound Blaster 16",
4098 0,
4099 1,
4100 { .init_isa = SB16_init }
4101 },
4102 #endif
4103
4104 #ifdef CONFIG_CS4231A
4105 {
4106 "cs4231a",
4107 "CS4231A",
4108 0,
4109 1,
4110 { .init_isa = cs4231a_init }
4111 },
4112 #endif
4113
4114 #ifdef CONFIG_ADLIB
4115 {
4116 "adlib",
4117 #ifdef HAS_YMF262
4118 "Yamaha YMF262 (OPL3)",
4119 #else
4120 "Yamaha YM3812 (OPL2)",
4121 #endif
4122 0,
4123 1,
4124 { .init_isa = Adlib_init }
4125 },
4126 #endif
4127
4128 #ifdef CONFIG_GUS
4129 {
4130 "gus",
4131 "Gravis Ultrasound GF1",
4132 0,
4133 1,
4134 { .init_isa = GUS_init }
4135 },
4136 #endif
4137
4138 #ifdef CONFIG_AC97
4139 {
4140 "ac97",
4141 "Intel 82801AA AC97 Audio",
4142 0,
4143 0,
4144 { .init_pci = ac97_init }
4145 },
4146 #endif
4147
4148 #ifdef CONFIG_ES1370
4149 {
4150 "es1370",
4151 "ENSONIQ AudioPCI ES1370",
4152 0,
4153 0,
4154 { .init_pci = es1370_init }
4155 },
4156 #endif
4157
4158 #endif /* HAS_AUDIO_CHOICE */
4159
4160 { NULL, NULL, 0, 0, { NULL } }
4161 };
4162
4163 static void select_soundhw (const char *optarg)
4164 {
4165 struct soundhw *c;
4166
4167 if (*optarg == '?') {
4168 show_valid_cards:
4169
4170 printf ("Valid sound card names (comma separated):\n");
4171 for (c = soundhw; c->name; ++c) {
4172 printf ("%-11s %s\n", c->name, c->descr);
4173 }
4174 printf ("\n-soundhw all will enable all of the above\n");
4175 exit (*optarg != '?');
4176 }
4177 else {
4178 size_t l;
4179 const char *p;
4180 char *e;
4181 int bad_card = 0;
4182
4183 if (!strcmp (optarg, "all")) {
4184 for (c = soundhw; c->name; ++c) {
4185 c->enabled = 1;
4186 }
4187 return;
4188 }
4189
4190 p = optarg;
4191 while (*p) {
4192 e = strchr (p, ',');
4193 l = !e ? strlen (p) : (size_t) (e - p);
4194
4195 for (c = soundhw; c->name; ++c) {
4196 if (!strncmp (c->name, p, l)) {
4197 c->enabled = 1;
4198 break;
4199 }
4200 }
4201
4202 if (!c->name) {
4203 if (l > 80) {
4204 fprintf (stderr,
4205 "Unknown sound card name (too big to show)\n");
4206 }
4207 else {
4208 fprintf (stderr, "Unknown sound card name `%.*s'\n",
4209 (int) l, p);
4210 }
4211 bad_card = 1;
4212 }
4213 p += l + (e != NULL);
4214 }
4215
4216 if (bad_card)
4217 goto show_valid_cards;
4218 }
4219 }
4220 #endif
4221
4222 static void select_vgahw (const char *p)
4223 {
4224 const char *opts;
4225
4226 cirrus_vga_enabled = 0;
4227 std_vga_enabled = 0;
4228 vmsvga_enabled = 0;
4229 xenfb_enabled = 0;
4230 if (strstart(p, "std", &opts)) {
4231 std_vga_enabled = 1;
4232 } else if (strstart(p, "cirrus", &opts)) {
4233 cirrus_vga_enabled = 1;
4234 } else if (strstart(p, "vmware", &opts)) {
4235 vmsvga_enabled = 1;
4236 } else if (strstart(p, "xenfb", &opts)) {
4237 xenfb_enabled = 1;
4238 } else if (!strstart(p, "none", &opts)) {
4239 invalid_vga:
4240 fprintf(stderr, "Unknown vga type: %s\n", p);
4241 exit(1);
4242 }
4243 while (*opts) {
4244 const char *nextopt;
4245
4246 if (strstart(opts, ",retrace=", &nextopt)) {
4247 opts = nextopt;
4248 if (strstart(opts, "dumb", &nextopt))
4249 vga_retrace_method = VGA_RETRACE_DUMB;
4250 else if (strstart(opts, "precise", &nextopt))
4251 vga_retrace_method = VGA_RETRACE_PRECISE;
4252 else goto invalid_vga;
4253 } else goto invalid_vga;
4254 opts = nextopt;
4255 }
4256 }
4257
4258 #ifdef _WIN32
4259 static BOOL WINAPI qemu_ctrl_handler(DWORD type)
4260 {
4261 exit(STATUS_CONTROL_C_EXIT);
4262 return TRUE;
4263 }
4264 #endif
4265
4266 int qemu_uuid_parse(const char *str, uint8_t *uuid)
4267 {
4268 int ret;
4269
4270 if(strlen(str) != 36)
4271 return -1;
4272
4273 ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
4274 &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
4275 &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
4276
4277 if(ret != 16)
4278 return -1;
4279
4280 #ifdef TARGET_I386
4281 smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
4282 #endif
4283
4284 return 0;
4285 }
4286
4287 #define MAX_NET_CLIENTS 32
4288
4289 #ifndef _WIN32
4290
4291 static void termsig_handler(int signal)
4292 {
4293 qemu_system_shutdown_request();
4294 }
4295
4296 static void termsig_setup(void)
4297 {
4298 struct sigaction act;
4299
4300 memset(&act, 0, sizeof(act));
4301 act.sa_handler = termsig_handler;
4302 sigaction(SIGINT, &act, NULL);
4303 sigaction(SIGHUP, &act, NULL);
4304 sigaction(SIGTERM, &act, NULL);
4305 }
4306
4307 #endif
4308
4309 int main(int argc, char **argv, char **envp)
4310 {
4311 #ifdef CONFIG_GDBSTUB
4312 const char *gdbstub_dev = NULL;
4313 #endif
4314 uint32_t boot_devices_bitmap = 0;
4315 int i;
4316 int snapshot, linux_boot, net_boot;
4317 const char *initrd_filename;
4318 const char *kernel_filename, *kernel_cmdline;
4319 const char *boot_devices = "";
4320 DisplayState *ds;
4321 DisplayChangeListener *dcl;
4322 int cyls, heads, secs, translation;
4323 const char *net_clients[MAX_NET_CLIENTS];
4324 int nb_net_clients;
4325 const char *bt_opts[MAX_BT_CMDLINE];
4326 int nb_bt_opts;
4327 int hda_index;
4328 int optind;
4329 const char *r, *optarg;
4330 CharDriverState *monitor_hd = NULL;
4331 const char *monitor_device;
4332 const char *serial_devices[MAX_SERIAL_PORTS];
4333 int serial_device_index;
4334 const char *parallel_devices[MAX_PARALLEL_PORTS];
4335 int parallel_device_index;
4336 const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
4337 int virtio_console_index;
4338 const char *loadvm = NULL;
4339 QEMUMachine *machine;
4340 const char *cpu_model;
4341 const char *usb_devices[MAX_USB_CMDLINE];
4342 int usb_devices_index;
4343 #ifndef _WIN32
4344 int fds[2];
4345 #endif
4346 int tb_size;
4347 const char *pid_file = NULL;
4348 const char *incoming = NULL;
4349 #ifndef _WIN32
4350 int fd = 0;
4351 struct passwd *pwd = NULL;
4352 const char *chroot_dir = NULL;
4353 const char *run_as = NULL;
4354 #endif
4355 CPUState *env;
4356
4357 qemu_cache_utils_init(envp);
4358
4359 LIST_INIT (&vm_change_state_head);
4360 #ifndef _WIN32
4361 {
4362 struct sigaction act;
4363 sigfillset(&act.sa_mask);
4364 act.sa_flags = 0;
4365 act.sa_handler = SIG_IGN;
4366 sigaction(SIGPIPE, &act, NULL);
4367 }
4368 #else
4369 SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
4370 /* Note: cpu_interrupt() is currently not SMP safe, so we force
4371 QEMU to run on a single CPU */
4372 {
4373 HANDLE h;
4374 DWORD mask, smask;
4375 int i;
4376 h = GetCurrentProcess();
4377 if (GetProcessAffinityMask(h, &mask, &smask)) {
4378 for(i = 0; i < 32; i++) {
4379 if (mask & (1 << i))
4380 break;
4381 }
4382 if (i != 32) {
4383 mask = 1 << i;
4384 SetProcessAffinityMask(h, mask);
4385 }
4386 }
4387 }
4388 #endif
4389
4390 register_machines();
4391 machine = first_machine;
4392 cpu_model = NULL;
4393 initrd_filename = NULL;
4394 ram_size = 0;
4395 vga_ram_size = VGA_RAM_SIZE;
4396 snapshot = 0;
4397 nographic = 0;
4398 curses = 0;
4399 kernel_filename = NULL;
4400 kernel_cmdline = "";
4401 cyls = heads = secs = 0;
4402 translation = BIOS_ATA_TRANSLATION_AUTO;
4403 monitor_device = "vc:80Cx24C";
4404
4405 serial_devices[0] = "vc:80Cx24C";
4406 for(i = 1; i < MAX_SERIAL_PORTS; i++)
4407 serial_devices[i] = NULL;
4408 serial_device_index = 0;
4409
4410 parallel_devices[0] = "vc:80Cx24C";
4411 for(i = 1; i < MAX_PARALLEL_PORTS; i++)
4412 parallel_devices[i] = NULL;
4413 parallel_device_index = 0;
4414
4415 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
4416 virtio_consoles[i] = NULL;
4417 virtio_console_index = 0;
4418
4419 for (i = 0; i < MAX_NODES; i++) {
4420 node_mem[i] = 0;
4421 node_cpumask[i] = 0;
4422 }
4423
4424 usb_devices_index = 0;
4425
4426 nb_net_clients = 0;
4427 nb_bt_opts = 0;
4428 nb_drives = 0;
4429 nb_drives_opt = 0;
4430 nb_numa_nodes = 0;
4431 hda_index = -1;
4432
4433 nb_nics = 0;
4434
4435 tb_size = 0;
4436 autostart= 1;
4437
4438 optind = 1;
4439 for(;;) {
4440 if (optind >= argc)
4441 break;
4442 r = argv[optind];
4443 if (r[0] != '-') {
4444 hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
4445 } else {
4446 const QEMUOption *popt;
4447
4448 optind++;
4449 /* Treat --foo the same as -foo. */
4450 if (r[1] == '-')
4451 r++;
4452 popt = qemu_options;
4453 for(;;) {
4454 if (!popt->name) {
4455 fprintf(stderr, "%s: invalid option -- '%s'\n",
4456 argv[0], r);
4457 exit(1);
4458 }
4459 if (!strcmp(popt->name, r + 1))
4460 break;
4461 popt++;
4462 }
4463 if (popt->flags & HAS_ARG) {
4464 if (optind >= argc) {
4465 fprintf(stderr, "%s: option '%s' requires an argument\n",
4466 argv[0], r);
4467 exit(1);
4468 }
4469 optarg = argv[optind++];
4470 } else {
4471 optarg = NULL;
4472 }
4473
4474 switch(popt->index) {
4475 case QEMU_OPTION_M:
4476 machine = find_machine(optarg);
4477 if (!machine) {
4478 QEMUMachine *m;
4479 printf("Supported machines are:\n");
4480 for(m = first_machine; m != NULL; m = m->next) {
4481 printf("%-10s %s%s\n",
4482 m->name, m->desc,
4483 m == first_machine ? " (default)" : "");
4484 }
4485 exit(*optarg != '?');
4486 }
4487 break;
4488 case QEMU_OPTION_cpu:
4489 /* hw initialization will check this */
4490 if (*optarg == '?') {
4491 /* XXX: implement xxx_cpu_list for targets that still miss it */
4492 #if defined(cpu_list)
4493 cpu_list(stdout, &fprintf);
4494 #endif
4495 exit(0);
4496 } else {
4497 cpu_model = optarg;
4498 }
4499 break;
4500 case QEMU_OPTION_initrd:
4501 initrd_filename = optarg;
4502 break;
4503 case QEMU_OPTION_hda:
4504 if (cyls == 0)
4505 hda_index = drive_add(optarg, HD_ALIAS, 0);
4506 else
4507 hda_index = drive_add(optarg, HD_ALIAS
4508 ",cyls=%d,heads=%d,secs=%d%s",
4509 0, cyls, heads, secs,
4510 translation == BIOS_ATA_TRANSLATION_LBA ?
4511 ",trans=lba" :
4512 translation == BIOS_ATA_TRANSLATION_NONE ?
4513 ",trans=none" : "");
4514 break;
4515 case QEMU_OPTION_hdb:
4516 case QEMU_OPTION_hdc:
4517 case QEMU_OPTION_hdd:
4518 drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
4519 break;
4520 case QEMU_OPTION_drive:
4521 drive_add(NULL, "%s", optarg);
4522 break;
4523 case QEMU_OPTION_mtdblock:
4524 drive_add(optarg, MTD_ALIAS);
4525 break;
4526 case QEMU_OPTION_sd:
4527 drive_add(optarg, SD_ALIAS);
4528 break;
4529 case QEMU_OPTION_pflash:
4530 drive_add(optarg, PFLASH_ALIAS);
4531 break;
4532 case QEMU_OPTION_snapshot:
4533 snapshot = 1;
4534 break;
4535 case QEMU_OPTION_hdachs:
4536 {
4537 const char *p;
4538 p = optarg;
4539 cyls = strtol(p, (char **)&p, 0);
4540 if (cyls < 1 || cyls > 16383)
4541 goto chs_fail;
4542 if (*p != ',')
4543 goto chs_fail;
4544 p++;
4545 heads = strtol(p, (char **)&p, 0);
4546 if (heads < 1 || heads > 16)
4547 goto chs_fail;
4548 if (*p != ',')
4549 goto chs_fail;
4550 p++;
4551 secs = strtol(p, (char **)&p, 0);
4552 if (secs < 1 || secs > 63)
4553 goto chs_fail;
4554 if (*p == ',') {
4555 p++;
4556 if (!strcmp(p, "none"))
4557 translation = BIOS_ATA_TRANSLATION_NONE;
4558 else if (!strcmp(p, "lba"))
4559 translation = BIOS_ATA_TRANSLATION_LBA;
4560 else if (!strcmp(p, "auto"))
4561 translation = BIOS_ATA_TRANSLATION_AUTO;
4562 else
4563 goto chs_fail;
4564 } else if (*p != '\0') {
4565 chs_fail:
4566 fprintf(stderr, "qemu: invalid physical CHS format\n");
4567 exit(1);
4568 }
4569 if (hda_index != -1)
4570 snprintf(drives_opt[hda_index].opt,
4571 sizeof(drives_opt[hda_index].opt),
4572 HD_ALIAS ",cyls=%d,heads=%d,secs=%d%s",
4573 0, cyls, heads, secs,
4574 translation == BIOS_ATA_TRANSLATION_LBA ?
4575 ",trans=lba" :
4576 translation == BIOS_ATA_TRANSLATION_NONE ?
4577 ",trans=none" : "");
4578 }
4579 break;
4580 case QEMU_OPTION_numa:
4581 if (nb_numa_nodes >= MAX_NODES) {
4582 fprintf(stderr, "qemu: too many NUMA nodes\n");
4583 exit(1);
4584 }
4585 numa_add(optarg);
4586 break;
4587 case QEMU_OPTION_nographic:
4588 nographic = 1;
4589 break;
4590 #ifdef CONFIG_CURSES
4591 case QEMU_OPTION_curses:
4592 curses = 1;
4593 break;
4594 #endif
4595 case QEMU_OPTION_portrait:
4596 graphic_rotate = 1;
4597 break;
4598 case QEMU_OPTION_kernel:
4599 kernel_filename = optarg;
4600 break;
4601 case QEMU_OPTION_append:
4602 kernel_cmdline = optarg;
4603 break;
4604 case QEMU_OPTION_cdrom:
4605 drive_add(optarg, CDROM_ALIAS);
4606 break;
4607 case QEMU_OPTION_boot:
4608 boot_devices = optarg;
4609 /* We just do some generic consistency checks */
4610 {
4611 /* Could easily be extended to 64 devices if needed */
4612 const char *p;
4613
4614 boot_devices_bitmap = 0;
4615 for (p = boot_devices; *p != '\0'; p++) {
4616 /* Allowed boot devices are:
4617 * a b : floppy disk drives
4618 * c ... f : IDE disk drives
4619 * g ... m : machine implementation dependant drives
4620 * n ... p : network devices
4621 * It's up to each machine implementation to check
4622 * if the given boot devices match the actual hardware
4623 * implementation and firmware features.
4624 */
4625 if (*p < 'a' || *p > 'q') {
4626 fprintf(stderr, "Invalid boot device '%c'\n", *p);
4627 exit(1);
4628 }
4629 if (boot_devices_bitmap & (1 << (*p - 'a'))) {
4630 fprintf(stderr,
4631 "Boot device '%c' was given twice\n",*p);
4632 exit(1);
4633 }
4634 boot_devices_bitmap |= 1 << (*p - 'a');
4635 }
4636 }
4637 break;
4638 case QEMU_OPTION_fda:
4639 case QEMU_OPTION_fdb:
4640 drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
4641 break;
4642 #ifdef TARGET_I386
4643 case QEMU_OPTION_no_fd_bootchk:
4644 fd_bootchk = 0;
4645 break;
4646 #endif
4647 case QEMU_OPTION_net:
4648 if (nb_net_clients >= MAX_NET_CLIENTS) {
4649 fprintf(stderr, "qemu: too many network clients\n");
4650 exit(1);
4651 }
4652 net_clients[nb_net_clients] = optarg;
4653 nb_net_clients++;
4654 break;
4655 #ifdef CONFIG_SLIRP
4656 case QEMU_OPTION_tftp:
4657 tftp_prefix = optarg;
4658 break;
4659 case QEMU_OPTION_bootp:
4660 bootp_filename = optarg;
4661 break;
4662 #ifndef _WIN32
4663 case QEMU_OPTION_smb:
4664 net_slirp_smb(optarg);
4665 break;
4666 #endif
4667 case QEMU_OPTION_redir:
4668 net_slirp_redir(NULL, optarg);
4669 break;
4670 #endif
4671 case QEMU_OPTION_bt:
4672 if (nb_bt_opts >= MAX_BT_CMDLINE) {
4673 fprintf(stderr, "qemu: too many bluetooth options\n");
4674 exit(1);
4675 }
4676 bt_opts[nb_bt_opts++] = optarg;
4677 break;
4678 #ifdef HAS_AUDIO
4679 case QEMU_OPTION_audio_help:
4680 AUD_help ();
4681 exit (0);
4682 break;
4683 case QEMU_OPTION_soundhw:
4684 select_soundhw (optarg);
4685 break;
4686 #endif
4687 case QEMU_OPTION_h:
4688 help(0);
4689 break;
4690 case QEMU_OPTION_version:
4691 version();
4692 exit(0);
4693 break;
4694 case QEMU_OPTION_m: {
4695 uint64_t value;
4696 char *ptr;
4697
4698 value = strtoul(optarg, &ptr, 10);
4699 switch (*ptr) {
4700 case 0: case 'M': case 'm':
4701 value <<= 20;
4702 break;
4703 case 'G': case 'g':
4704 value <<= 30;
4705 break;
4706 default:
4707 fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
4708 exit(1);
4709 }
4710
4711 /* On 32-bit hosts, QEMU is limited by virtual address space */
4712 if (value > (2047 << 20)
4713 #ifndef CONFIG_KQEMU
4714 && HOST_LONG_BITS == 32
4715 #endif
4716 ) {
4717 fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
4718 exit(1);
4719 }
4720 if (value != (uint64_t)(ram_addr_t)value) {
4721 fprintf(stderr, "qemu: ram size too large\n");
4722 exit(1);
4723 }
4724 ram_size = value;
4725 break;
4726 }
4727 case QEMU_OPTION_d:
4728 {
4729 int mask;
4730 const CPULogItem *item;
4731
4732 mask = cpu_str_to_log_mask(optarg);
4733 if (!mask) {
4734 printf("Log items (comma separated):\n");
4735 for(item = cpu_log_items; item->mask != 0; item++) {
4736 printf("%-10s %s\n", item->name, item->help);
4737 }
4738 exit(1);
4739 }
4740 cpu_set_log(mask);
4741 }
4742 break;
4743 #ifdef CONFIG_GDBSTUB
4744 case QEMU_OPTION_s:
4745 gdbstub_dev = "tcp::" DEFAULT_GDBSTUB_PORT;
4746 break;
4747 case QEMU_OPTION_gdb:
4748 gdbstub_dev = optarg;
4749 break;
4750 #endif
4751 case QEMU_OPTION_L:
4752 bios_dir = optarg;
4753 break;
4754 case QEMU_OPTION_bios:
4755 bios_name = optarg;
4756 break;
4757 case QEMU_OPTION_singlestep:
4758 singlestep = 1;
4759 break;
4760 case QEMU_OPTION_S:
4761 autostart = 0;
4762 break;
4763 #ifndef _WIN32
4764 case QEMU_OPTION_k:
4765 keyboard_layout = optarg;
4766 break;
4767 #endif
4768 case QEMU_OPTION_localtime:
4769 rtc_utc = 0;
4770 break;
4771 case QEMU_OPTION_vga:
4772 select_vgahw (optarg);
4773 break;
4774 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
4775 case QEMU_OPTION_g:
4776 {
4777 const char *p;
4778 int w, h, depth;
4779 p = optarg;
4780 w = strtol(p, (char **)&p, 10);
4781 if (w <= 0) {
4782 graphic_error:
4783 fprintf(stderr, "qemu: invalid resolution or depth\n");
4784 exit(1);
4785 }
4786 if (*p != 'x')
4787 goto graphic_error;
4788 p++;
4789 h = strtol(p, (char **)&p, 10);
4790 if (h <= 0)
4791 goto graphic_error;
4792 if (*p == 'x') {
4793 p++;
4794 depth = strtol(p, (char **)&p, 10);
4795 if (depth != 8 && depth != 15 && depth != 16 &&
4796 depth != 24 && depth != 32)
4797 goto graphic_error;
4798 } else if (*p == '\0') {
4799 depth = graphic_depth;
4800 } else {
4801 goto graphic_error;
4802 }
4803
4804 graphic_width = w;
4805 graphic_height = h;
4806 graphic_depth = depth;
4807 }
4808 break;
4809 #endif
4810 case QEMU_OPTION_echr:
4811 {
4812 char *r;
4813 term_escape_char = strtol(optarg, &r, 0);
4814 if (r == optarg)
4815 printf("Bad argument to echr\n");
4816 break;
4817 }
4818 case QEMU_OPTION_monitor:
4819 monitor_device = optarg;
4820 break;
4821 case QEMU_OPTION_serial:
4822 if (serial_device_index >= MAX_SERIAL_PORTS) {
4823 fprintf(stderr, "qemu: too many serial ports\n");
4824 exit(1);
4825 }
4826 serial_devices[serial_device_index] = optarg;
4827 serial_device_index++;
4828 break;
4829 case QEMU_OPTION_virtiocon:
4830 if (virtio_console_index >= MAX_VIRTIO_CONSOLES) {
4831 fprintf(stderr, "qemu: too many virtio consoles\n");
4832 exit(1);
4833 }
4834 virtio_consoles[virtio_console_index] = optarg;
4835 virtio_console_index++;
4836 break;
4837 case QEMU_OPTION_parallel:
4838 if (parallel_device_index >= MAX_PARALLEL_PORTS) {
4839 fprintf(stderr, "qemu: too many parallel ports\n");
4840 exit(1);
4841 }
4842 parallel_devices[parallel_device_index] = optarg;
4843 parallel_device_index++;
4844 break;
4845 case QEMU_OPTION_loadvm:
4846 loadvm = optarg;
4847 break;
4848 case QEMU_OPTION_full_screen:
4849 full_screen = 1;
4850 break;
4851 #ifdef CONFIG_SDL
4852 case QEMU_OPTION_no_frame:
4853 no_frame = 1;
4854 break;
4855 case QEMU_OPTION_alt_grab:
4856 alt_grab = 1;
4857 break;
4858 case QEMU_OPTION_no_quit:
4859 no_quit = 1;
4860 break;
4861 case QEMU_OPTION_sdl:
4862 sdl = 1;
4863 break;
4864 #endif
4865 case QEMU_OPTION_pidfile:
4866 pid_file = optarg;
4867 break;
4868 #ifdef TARGET_I386
4869 case QEMU_OPTION_win2k_hack:
4870 win2k_install_hack = 1;
4871 break;
4872 case QEMU_OPTION_rtc_td_hack:
4873 rtc_td_hack = 1;
4874 break;
4875 case QEMU_OPTION_acpitable:
4876 if(acpi_table_add(optarg) < 0) {
4877 fprintf(stderr, "Wrong acpi table provided\n");
4878 exit(1);
4879 }
4880 break;
4881 case QEMU_OPTION_smbios:
4882 if(smbios_entry_add(optarg) < 0) {
4883 fprintf(stderr, "Wrong smbios provided\n");
4884 exit(1);
4885 }
4886 break;
4887 #endif
4888 #ifdef CONFIG_KQEMU
4889 case QEMU_OPTION_no_kqemu:
4890 kqemu_allowed = 0;
4891 break;
4892 case QEMU_OPTION_kernel_kqemu:
4893 kqemu_allowed = 2;
4894 break;
4895 #endif
4896 #ifdef CONFIG_KVM
4897 case QEMU_OPTION_enable_kvm:
4898 kvm_allowed = 1;
4899 #ifdef CONFIG_KQEMU
4900 kqemu_allowed = 0;
4901 #endif
4902 break;
4903 #endif
4904 case QEMU_OPTION_usb:
4905 usb_enabled = 1;
4906 break;
4907 case QEMU_OPTION_usbdevice:
4908 usb_enabled = 1;
4909 if (usb_devices_index >= MAX_USB_CMDLINE) {
4910 fprintf(stderr, "Too many USB devices\n");
4911 exit(1);
4912 }
4913 usb_devices[usb_devices_index] = optarg;
4914 usb_devices_index++;
4915 break;
4916 case QEMU_OPTION_smp:
4917 smp_cpus = atoi(optarg);
4918 if (smp_cpus < 1) {
4919 fprintf(stderr, "Invalid number of CPUs\n");
4920 exit(1);
4921 }
4922 break;
4923 case QEMU_OPTION_vnc:
4924 vnc_display = optarg;
4925 break;
4926 #ifdef TARGET_I386
4927 case QEMU_OPTION_no_acpi:
4928 acpi_enabled = 0;
4929 break;
4930 case QEMU_OPTION_no_hpet:
4931 no_hpet = 1;
4932 break;
4933 #endif
4934 case QEMU_OPTION_no_reboot:
4935 no_reboot = 1;
4936 break;
4937 case QEMU_OPTION_no_shutdown:
4938 no_shutdown = 1;
4939 break;
4940 case QEMU_OPTION_show_cursor:
4941 cursor_hide = 0;
4942 break;
4943 case QEMU_OPTION_uuid:
4944 if(qemu_uuid_parse(optarg, qemu_uuid) < 0) {
4945 fprintf(stderr, "Fail to parse UUID string."
4946 " Wrong format.\n");
4947 exit(1);
4948 }
4949 break;
4950 #ifndef _WIN32
4951 case QEMU_OPTION_daemonize:
4952 daemonize = 1;
4953 break;
4954 #endif
4955 case QEMU_OPTION_option_rom:
4956 if (nb_option_roms >= MAX_OPTION_ROMS) {
4957 fprintf(stderr, "Too many option ROMs\n");
4958 exit(1);
4959 }
4960 option_rom[nb_option_roms] = optarg;
4961 nb_option_roms++;
4962 break;
4963 #if defined(TARGET_ARM) || defined(TARGET_M68K)
4964 case QEMU_OPTION_semihosting:
4965 semihosting_enabled = 1;
4966 break;
4967 #endif
4968 case QEMU_OPTION_name:
4969 qemu_name = optarg;
4970 break;
4971 #if defined(TARGET_SPARC) || defined(TARGET_PPC)
4972 case QEMU_OPTION_prom_env:
4973 if (nb_prom_envs >= MAX_PROM_ENVS) {
4974 fprintf(stderr, "Too many prom variables\n");
4975 exit(1);
4976 }
4977 prom_envs[nb_prom_envs] = optarg;
4978 nb_prom_envs++;
4979 break;
4980 #endif
4981 #ifdef TARGET_ARM
4982 case QEMU_OPTION_old_param:
4983 old_param = 1;
4984 break;
4985 #endif
4986 case QEMU_OPTION_clock:
4987 configure_alarms(optarg);
4988 break;
4989 case QEMU_OPTION_startdate:
4990 {
4991 struct tm tm;
4992 time_t rtc_start_date;
4993 if (!strcmp(optarg, "now")) {
4994 rtc_date_offset = -1;
4995 } else {
4996 if (sscanf(optarg, "%d-%d-%dT%d:%d:%d",
4997 &tm.tm_year,
4998 &tm.tm_mon,
4999 &tm.tm_mday,
5000 &tm.tm_hour,
5001 &tm.tm_min,
5002 &tm.tm_sec) == 6) {
5003 /* OK */
5004 } else if (sscanf(optarg, "%d-%d-%d",
5005 &tm.tm_year,
5006 &tm.tm_mon,
5007 &tm.tm_mday) == 3) {
5008 tm.tm_hour = 0;
5009 tm.tm_min = 0;
5010 tm.tm_sec = 0;
5011 } else {
5012 goto date_fail;
5013 }
5014 tm.tm_year -= 1900;
5015 tm.tm_mon--;
5016 rtc_start_date = mktimegm(&tm);
5017 if (rtc_start_date == -1) {
5018 date_fail:
5019 fprintf(stderr, "Invalid date format. Valid format are:\n"
5020 "'now' or '2006-06-17T16:01:21' or '2006-06-17'\n");
5021 exit(1);
5022 }
5023 rtc_date_offset = time(NULL) - rtc_start_date;
5024 }
5025 }
5026 break;
5027 case QEMU_OPTION_tb_size:
5028 tb_size = strtol(optarg, NULL, 0);
5029 if (tb_size < 0)
5030 tb_size = 0;
5031 break;
5032 case QEMU_OPTION_icount:
5033 use_icount = 1;
5034 if (strcmp(optarg, "auto") == 0) {
5035 icount_time_shift = -1;
5036 } else {
5037 icount_time_shift = strtol(optarg, NULL, 0);
5038 }
5039 break;
5040 case QEMU_OPTION_incoming:
5041 incoming = optarg;
5042 break;
5043 #ifndef _WIN32
5044 case QEMU_OPTION_chroot:
5045 chroot_dir = optarg;
5046 break;
5047 case QEMU_OPTION_runas:
5048 run_as = optarg;
5049 break;
5050 #endif
5051 #ifdef CONFIG_XEN
5052 case QEMU_OPTION_xen_domid:
5053 xen_domid = atoi(optarg);
5054 break;
5055 case QEMU_OPTION_xen_create:
5056 xen_mode = XEN_CREATE;
5057 break;
5058 case QEMU_OPTION_xen_attach:
5059 xen_mode = XEN_ATTACH;
5060 break;
5061 #endif
5062 }
5063 }
5064 }
5065
5066 #if defined(CONFIG_KVM) && defined(CONFIG_KQEMU)
5067 if (kvm_allowed && kqemu_allowed) {
5068 fprintf(stderr,
5069 "You can not enable both KVM and kqemu at the same time\n");
5070 exit(1);
5071 }
5072 #endif
5073
5074 machine->max_cpus = machine->max_cpus ?: 1; /* Default to UP */
5075 if (smp_cpus > machine->max_cpus) {
5076 fprintf(stderr, "Number of SMP cpus requested (%d), exceeds max cpus "
5077 "supported by machine `%s' (%d)\n", smp_cpus, machine->name,
5078 machine->max_cpus);
5079 exit(1);
5080 }
5081
5082 if (nographic) {
5083 if (serial_device_index == 0)
5084 serial_devices[0] = "stdio";
5085 if (parallel_device_index == 0)
5086 parallel_devices[0] = "null";
5087 if (strncmp(monitor_device, "vc", 2) == 0)
5088 monitor_device = "stdio";
5089 }
5090
5091 #ifndef _WIN32
5092 if (daemonize) {
5093 pid_t pid;
5094
5095 if (pipe(fds) == -1)
5096 exit(1);
5097
5098 pid = fork();
5099 if (pid > 0) {
5100 uint8_t status;
5101 ssize_t len;
5102
5103 close(fds[1]);
5104
5105 again:
5106 len = read(fds[0], &status, 1);
5107 if (len == -1 && (errno == EINTR))
5108 goto again;
5109
5110 if (len != 1)
5111 exit(1);
5112 else if (status == 1) {
5113 fprintf(stderr, "Could not acquire pidfile\n");
5114 exit(1);
5115 } else
5116 exit(0);
5117 } else if (pid < 0)
5118 exit(1);
5119
5120 setsid();
5121
5122 pid = fork();
5123 if (pid > 0)
5124 exit(0);
5125 else if (pid < 0)
5126 exit(1);
5127
5128 umask(027);
5129
5130 signal(SIGTSTP, SIG_IGN);
5131 signal(SIGTTOU, SIG_IGN);
5132 signal(SIGTTIN, SIG_IGN);
5133 }
5134
5135 if (pid_file && qemu_create_pidfile(pid_file) != 0) {
5136 if (daemonize) {
5137 uint8_t status = 1;
5138 write(fds[1], &status, 1);
5139 } else
5140 fprintf(stderr, "Could not acquire pid file\n");
5141 exit(1);
5142 }
5143 #endif
5144
5145 #ifdef CONFIG_KQEMU
5146 if (smp_cpus > 1)
5147 kqemu_allowed = 0;
5148 #endif
5149 linux_boot = (kernel_filename != NULL);
5150 net_boot = (boot_devices_bitmap >> ('n' - 'a')) & 0xF;
5151
5152 if (!linux_boot && *kernel_cmdline != '\0') {
5153 fprintf(stderr, "-append only allowed with -kernel option\n");
5154 exit(1);
5155 }
5156
5157 if (!linux_boot && initrd_filename != NULL) {
5158 fprintf(stderr, "-initrd only allowed with -kernel option\n");
5159 exit(1);
5160 }
5161
5162 /* boot to floppy or the default cd if no hard disk defined yet */
5163 if (!boot_devices[0]) {
5164 boot_devices = "cad";
5165 }
5166 setvbuf(stdout, NULL, _IOLBF, 0);
5167
5168 init_timers();
5169 if (init_timer_alarm() < 0) {
5170 fprintf(stderr, "could not initialize alarm timer\n");
5171 exit(1);
5172 }
5173 if (use_icount && icount_time_shift < 0) {
5174 use_icount = 2;
5175 /* 125MIPS seems a reasonable initial guess at the guest speed.
5176 It will be corrected fairly quickly anyway. */
5177 icount_time_shift = 3;
5178 init_icount_adjust();
5179 }
5180
5181 #ifdef _WIN32
5182 socket_init();
5183 #endif
5184
5185 /* init network clients */
5186 if (nb_net_clients == 0) {
5187 /* if no clients, we use a default config */
5188 net_clients[nb_net_clients++] = "nic";
5189 #ifdef CONFIG_SLIRP
5190 net_clients[nb_net_clients++] = "user";
5191 #endif
5192 }
5193
5194 for(i = 0;i < nb_net_clients; i++) {
5195 if (net_client_parse(net_clients[i]) < 0)
5196 exit(1);
5197 }
5198 net_client_check();
5199
5200 #ifdef TARGET_I386
5201 /* XXX: this should be moved in the PC machine instantiation code */
5202 if (net_boot != 0) {
5203 int netroms = 0;
5204 for (i = 0; i < nb_nics && i < 4; i++) {
5205 const char *model = nd_table[i].model;
5206 char buf[1024];
5207 if (net_boot & (1 << i)) {
5208 if (model == NULL)
5209 model = "ne2k_pci";
5210 snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
5211 if (get_image_size(buf) > 0) {
5212 if (nb_option_roms >= MAX_OPTION_ROMS) {
5213 fprintf(stderr, "Too many option ROMs\n");
5214 exit(1);
5215 }
5216 option_rom[nb_option_roms] = strdup(buf);
5217 nb_option_roms++;
5218 netroms++;
5219 }
5220 }
5221 }
5222 if (netroms == 0) {
5223 fprintf(stderr, "No valid PXE rom found for network device\n");
5224 exit(1);
5225 }
5226 }
5227 #endif
5228
5229 /* init the bluetooth world */
5230 for (i = 0; i < nb_bt_opts; i++)
5231 if (bt_parse(bt_opts[i]))
5232 exit(1);
5233
5234 /* init the memory */
5235 if (ram_size == 0)
5236 ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5237
5238 #ifdef CONFIG_KQEMU
5239 /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5240 guest ram allocation. It needs to go away. */
5241 if (kqemu_allowed) {
5242 kqemu_phys_ram_size = ram_size + VGA_RAM_SIZE + 4 * 1024 * 1024;
5243 kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5244 if (!kqemu_phys_ram_base) {
5245 fprintf(stderr, "Could not allocate physical memory\n");
5246 exit(1);
5247 }
5248 }
5249 #endif
5250
5251 /* init the dynamic translator */
5252 cpu_exec_init_all(tb_size * 1024 * 1024);
5253
5254 bdrv_init();
5255 dma_helper_init();
5256
5257 /* we always create the cdrom drive, even if no disk is there */
5258
5259 if (nb_drives_opt < MAX_DRIVES)
5260 drive_add(NULL, CDROM_ALIAS);
5261
5262 /* we always create at least one floppy */
5263
5264 if (nb_drives_opt < MAX_DRIVES)
5265 drive_add(NULL, FD_ALIAS, 0);
5266
5267 /* we always create one sd slot, even if no card is in it */
5268
5269 if (nb_drives_opt < MAX_DRIVES)
5270 drive_add(NULL, SD_ALIAS);
5271
5272 /* open the virtual block devices */
5273
5274 for(i = 0; i < nb_drives_opt; i++)
5275 if (drive_init(&drives_opt[i], snapshot, machine) == -1)
5276 exit(1);
5277
5278 register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
5279 register_savevm_live("ram", 0, 3, ram_save_live, NULL, ram_load, NULL);
5280
5281 #ifndef _WIN32
5282 /* must be after terminal init, SDL library changes signal handlers */
5283 termsig_setup();
5284 #endif
5285
5286 /* Maintain compatibility with multiple stdio monitors */
5287 if (!strcmp(monitor_device,"stdio")) {
5288 for (i = 0; i < MAX_SERIAL_PORTS; i++) {
5289 const char *devname = serial_devices[i];
5290 if (devname && !strcmp(devname,"mon:stdio")) {
5291 monitor_device = NULL;
5292 break;
5293 } else if (devname && !strcmp(devname,"stdio")) {
5294 monitor_device = NULL;
5295 serial_devices[i] = "mon:stdio";
5296 break;
5297 }
5298 }
5299 }
5300
5301 if (nb_numa_nodes > 0) {
5302 int i;
5303
5304 if (nb_numa_nodes > smp_cpus) {
5305 nb_numa_nodes = smp_cpus;
5306 }
5307
5308 /* If no memory size if given for any node, assume the default case
5309 * and distribute the available memory equally across all nodes
5310 */
5311 for (i = 0; i < nb_numa_nodes; i++) {
5312 if (node_mem[i] != 0)
5313 break;
5314 }
5315 if (i == nb_numa_nodes) {
5316 uint64_t usedmem = 0;
5317
5318 /* On Linux, the each node's border has to be 8MB aligned,
5319 * the final node gets the rest.
5320 */
5321 for (i = 0; i < nb_numa_nodes - 1; i++) {
5322 node_mem[i] = (ram_size / nb_numa_nodes) & ~((1 << 23UL) - 1);
5323 usedmem += node_mem[i];
5324 }
5325 node_mem[i] = ram_size - usedmem;
5326 }
5327
5328 for (i = 0; i < nb_numa_nodes; i++) {
5329 if (node_cpumask[i] != 0)
5330 break;
5331 }
5332 /* assigning the VCPUs round-robin is easier to implement, guest OSes
5333 * must cope with this anyway, because there are BIOSes out there in
5334 * real machines which also use this scheme.
5335 */
5336 if (i == nb_numa_nodes) {
5337 for (i = 0; i < smp_cpus; i++) {
5338 node_cpumask[i % nb_numa_nodes] |= 1 << i;
5339 }
5340 }
5341 }
5342
5343 if (kvm_enabled()) {
5344 int ret;
5345
5346 ret = kvm_init(smp_cpus);
5347 if (ret < 0) {
5348 fprintf(stderr, "failed to initialize KVM\n");
5349 exit(1);
5350 }
5351 }
5352
5353 if (monitor_device) {
5354 monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
5355 if (!monitor_hd) {
5356 fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
5357 exit(1);
5358 }
5359 }
5360
5361 for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5362 const char *devname = serial_devices[i];
5363 if (devname && strcmp(devname, "none")) {
5364 char label[32];
5365 snprintf(label, sizeof(label), "serial%d", i);
5366 serial_hds[i] = qemu_chr_open(label, devname, NULL);
5367 if (!serial_hds[i]) {
5368 fprintf(stderr, "qemu: could not open serial device '%s'\n",
5369 devname);
5370 exit(1);
5371 }
5372 }
5373 }
5374
5375 for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5376 const char *devname = parallel_devices[i];
5377 if (devname && strcmp(devname, "none")) {
5378 char label[32];
5379 snprintf(label, sizeof(label), "parallel%d", i);
5380 parallel_hds[i] = qemu_chr_open(label, devname, NULL);
5381 if (!parallel_hds[i]) {
5382 fprintf(stderr, "qemu: could not open parallel device '%s'\n",
5383 devname);
5384 exit(1);
5385 }
5386 }
5387 }
5388
5389 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5390 const char *devname = virtio_consoles[i];
5391 if (devname && strcmp(devname, "none")) {
5392 char label[32];
5393 snprintf(label, sizeof(label), "virtcon%d", i);
5394 virtcon_hds[i] = qemu_chr_open(label, devname, NULL);
5395 if (!virtcon_hds[i]) {
5396 fprintf(stderr, "qemu: could not open virtio console '%s'\n",
5397 devname);
5398 exit(1);
5399 }
5400 }
5401 }
5402
5403 machine->init(ram_size, vga_ram_size, boot_devices,
5404 kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
5405
5406
5407 for (env = first_cpu; env != NULL; env = env->next_cpu) {
5408 for (i = 0; i < nb_numa_nodes; i++) {
5409 if (node_cpumask[i] & (1 << env->cpu_index)) {
5410 env->numa_node = i;
5411 }
5412 }
5413 }
5414
5415 current_machine = machine;
5416
5417 /* Set KVM's vcpu state to qemu's initial CPUState. */
5418 if (kvm_enabled()) {
5419 int ret;
5420
5421 ret = kvm_sync_vcpus();
5422 if (ret < 0) {
5423 fprintf(stderr, "failed to initialize vcpus\n");
5424 exit(1);
5425 }
5426 }
5427
5428 /* init USB devices */
5429 if (usb_enabled) {
5430 for(i = 0; i < usb_devices_index; i++) {
5431 if (usb_device_add(usb_devices[i], 0) < 0) {
5432 fprintf(stderr, "Warning: could not add USB device %s\n",
5433 usb_devices[i]);
5434 }
5435 }
5436 }
5437
5438 if (!display_state)
5439 dumb_display_init();
5440 /* just use the first displaystate for the moment */
5441 ds = display_state;
5442 /* terminal init */
5443 if (nographic) {
5444 if (curses) {
5445 fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
5446 exit(1);
5447 }
5448 } else {
5449 #if defined(CONFIG_CURSES)
5450 if (curses) {
5451 /* At the moment curses cannot be used with other displays */
5452 curses_display_init(ds, full_screen);
5453 } else
5454 #endif
5455 {
5456 if (vnc_display != NULL) {
5457 vnc_display_init(ds);
5458 if (vnc_display_open(ds, vnc_display) < 0)
5459 exit(1);
5460 }
5461 #if defined(CONFIG_SDL)
5462 if (sdl || !vnc_display)
5463 sdl_display_init(ds, full_screen, no_frame);
5464 #elif defined(CONFIG_COCOA)
5465 if (sdl || !vnc_display)
5466 cocoa_display_init(ds, full_screen);
5467 #endif
5468 }
5469 }
5470 dpy_resize(ds);
5471
5472 dcl = ds->listeners;
5473 while (dcl != NULL) {
5474 if (dcl->dpy_refresh != NULL) {
5475 ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
5476 qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
5477 }
5478 dcl = dcl->next;
5479 }
5480
5481 if (nographic || (vnc_display && !sdl)) {
5482 nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL);
5483 qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
5484 }
5485
5486 text_consoles_set_display(display_state);
5487 qemu_chr_initial_reset();
5488
5489 if (monitor_device && monitor_hd)
5490 monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
5491
5492 for(i = 0; i < MAX_SERIAL_PORTS; i++) {
5493 const char *devname = serial_devices[i];
5494 if (devname && strcmp(devname, "none")) {
5495 char label[32];
5496 snprintf(label, sizeof(label), "serial%d", i);
5497 if (strstart(devname, "vc", 0))
5498 qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
5499 }
5500 }
5501
5502 for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
5503 const char *devname = parallel_devices[i];
5504 if (devname && strcmp(devname, "none")) {
5505 char label[32];
5506 snprintf(label, sizeof(label), "parallel%d", i);
5507 if (strstart(devname, "vc", 0))
5508 qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
5509 }
5510 }
5511
5512 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
5513 const char *devname = virtio_consoles[i];
5514 if (virtcon_hds[i] && devname) {
5515 char label[32];
5516 snprintf(label, sizeof(label), "virtcon%d", i);
5517 if (strstart(devname, "vc", 0))
5518 qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
5519 }
5520 }
5521
5522 #ifdef CONFIG_GDBSTUB
5523 if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
5524 fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
5525 gdbstub_dev);
5526 exit(1);
5527 }
5528 #endif
5529
5530 if (loadvm)
5531 do_loadvm(cur_mon, loadvm);
5532
5533 if (incoming) {
5534 autostart = 0; /* fixme how to deal with -daemonize */
5535 qemu_start_incoming_migration(incoming);
5536 }
5537
5538 if (autostart)
5539 vm_start();
5540
5541 #ifndef _WIN32
5542 if (daemonize) {
5543 uint8_t status = 0;
5544 ssize_t len;
5545
5546 again1:
5547 len = write(fds[1], &status, 1);
5548 if (len == -1 && (errno == EINTR))
5549 goto again1;
5550
5551 if (len != 1)
5552 exit(1);
5553
5554 chdir("/");
5555 TFR(fd = open("/dev/null", O_RDWR));
5556 if (fd == -1)
5557 exit(1);
5558 }
5559
5560 if (run_as) {
5561 pwd = getpwnam(run_as);
5562 if (!pwd) {
5563 fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
5564 exit(1);
5565 }
5566 }
5567
5568 if (chroot_dir) {
5569 if (chroot(chroot_dir) < 0) {
5570 fprintf(stderr, "chroot failed\n");
5571 exit(1);
5572 }
5573 chdir("/");
5574 }
5575
5576 if (run_as) {
5577 if (setgid(pwd->pw_gid) < 0) {
5578 fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
5579 exit(1);
5580 }
5581 if (setuid(pwd->pw_uid) < 0) {
5582 fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
5583 exit(1);
5584 }
5585 if (setuid(0) != -1) {
5586 fprintf(stderr, "Dropping privileges failed\n");
5587 exit(1);
5588 }
5589 }
5590
5591 if (daemonize) {
5592 dup2(fd, 0);
5593 dup2(fd, 1);
5594 dup2(fd, 2);
5595
5596 close(fd);
5597 }
5598 #endif
5599
5600 main_loop();
5601 quit_timers();
5602 net_cleanup();
5603
5604 return 0;
5605 }