aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.objs12
-rw-r--r--Makefile.target13
-rw-r--r--arch_init.c509
-rw-r--r--arch_init.h33
-rw-r--r--qemu-options.hx309
-rw-r--r--sysemu.h4
-rw-r--r--vl.c476
7 files changed, 751 insertions, 605 deletions
diff --git a/Makefile.objs b/Makefile.objs
index 50ae89039f..d8eef0a747 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -127,7 +127,7 @@ user-obj-y += cutils.o cache-utils.o
# libhw
hw-obj-y =
-hw-obj-y += loader.o
+hw-obj-y += vl.o loader.o
hw-obj-y += virtio.o virtio-console.o
hw-obj-$(CONFIG_VIRTIO_PCI) += virtio-pci.o
hw-obj-y += fw_cfg.o pci.o pci_host.o pcie_host.o
@@ -216,3 +216,13 @@ libdis-$(CONFIG_PPC_DIS) += ppc-dis.o
libdis-$(CONFIG_S390_DIS) += s390-dis.o
libdis-$(CONFIG_SH4_DIS) += sh4-dis.o
libdis-$(CONFIG_SPARC_DIS) += sparc-dis.o
+
+vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
+
+vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
+
+vl.o: qemu-options.h
+
+qemu-options.h: $(SRC_PATH)/qemu-options.hx
+ $(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $(TARGET_DIR)$@")
+
diff --git a/Makefile.target b/Makefile.target
index a89158ae60..36b3408ea5 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -161,7 +161,7 @@ endif #CONFIG_BSD_USER
# System emulator target
ifdef CONFIG_SOFTMMU
-obj-y = vl.o cpus.o monitor.o machine.o gdbstub.o
+obj-y = arch_init.o cpus.o monitor.o machine.o gdbstub.o
obj-y += qemu-timer.o
# virtio has to be here due to weird dependency between PCI and virtio-net.
# need to fix this properly
@@ -285,11 +285,7 @@ obj-s390x-y = s390-virtio-bus.o s390-virtio.o
obj-alpha-y = alpha_palcode.o
-main.o vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
-
-vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
-
-vl.o: qemu-options.h
+main.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
monitor.o: qemu-monitor.h
@@ -311,16 +307,13 @@ $(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y)
gdbstub-xml.c: $(TARGET_XML_FILES) $(SRC_PATH)/feature_to_c.sh
$(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/feature_to_c.sh $@ $(TARGET_XML_FILES)," GEN $(TARGET_DIR)$@")
-qemu-options.h: $(SRC_PATH)/qemu-options.hx
- $(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $(TARGET_DIR)$@")
-
qemu-monitor.h: $(SRC_PATH)/qemu-monitor.hx
$(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $(TARGET_DIR)$@")
clean:
rm -f *.o *.a *~ $(PROGS) nwfpe/*.o fpu/*.o
rm -f *.d */*.d tcg/*.o ide/*.o
- rm -f qemu-options.h qemu-monitor.h gdbstub-xml.c
+ rm -f qemu-monitor.h gdbstub-xml.c
install: all
ifneq ($(PROGS),)
diff --git a/arch_init.c b/arch_init.c
new file mode 100644
index 0000000000..171e21c7de
--- /dev/null
+++ b/arch_init.c
@@ -0,0 +1,509 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdint.h>
+#include <stdarg.h>
+#ifndef _WIN32
+#include <sys/mman.h>
+#endif
+#include "config.h"
+#include "monitor.h"
+#include "sysemu.h"
+#include "arch_init.h"
+#include "audio/audio.h"
+#include "hw/pc.h"
+#include "hw/pci.h"
+#include "hw/audiodev.h"
+#include "kvm.h"
+#include "migration.h"
+#include "net.h"
+#include "gdbstub.h"
+#include "hw/smbios.h"
+
+#ifdef TARGET_SPARC
+int graphic_width = 1024;
+int graphic_height = 768;
+int graphic_depth = 8;
+#else
+int graphic_width = 800;
+int graphic_height = 600;
+int graphic_depth = 15;
+#endif
+
+const char arch_config_name[] = CONFIG_QEMU_CONFDIR "/target-" TARGET_ARCH ".conf";
+
+#if defined(TARGET_ALPHA)
+#define QEMU_ARCH QEMU_ARCH_ALPHA
+#elif defined(TARGET_ARM)
+#define QEMU_ARCH QEMU_ARCH_ARM
+#elif defined(TARGET_CRIS)
+#define QEMU_ARCH QEMU_ARCH_CRIS
+#elif defined(TARGET_I386)
+#define QEMU_ARCH QEMU_ARCH_I386
+#elif defined(TARGET_M68K)
+#define QEMU_ARCH QEMU_ARCH_M68K
+#elif defined(TARGET_MICROBLAZE)
+#define QEMU_ARCH QEMU_ARCH_MICROBLAZE
+#elif defined(TARGET_MIPS)
+#define QEMU_ARCH QEMU_ARCH_MIPS
+#elif defined(TARGET_PPC)
+#define QEMU_ARCH QEMU_ARCH_PPC
+#elif defined(TARGET_S390X)
+#define QEMU_ARCH QEMU_ARCH_S390X
+#elif defined(TARGET_SH4)
+#define QEMU_ARCH QEMU_ARCH_SH4
+#elif defined(TARGET_SPARC)
+#define QEMU_ARCH QEMU_ARCH_SPARC
+#endif
+
+const uint32_t arch_type = QEMU_ARCH;
+
+/***********************************************************/
+/* ram save/restore */
+
+#define RAM_SAVE_FLAG_FULL 0x01 /* Obsolete, not used anymore */
+#define RAM_SAVE_FLAG_COMPRESS 0x02
+#define RAM_SAVE_FLAG_MEM_SIZE 0x04
+#define RAM_SAVE_FLAG_PAGE 0x08
+#define RAM_SAVE_FLAG_EOS 0x10
+
+static int is_dup_page(uint8_t *page, uint8_t ch)
+{
+ uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
+ uint32_t *array = (uint32_t *)page;
+ int i;
+
+ for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
+ if (array[i] != val) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int ram_save_block(QEMUFile *f)
+{
+ static ram_addr_t current_addr = 0;
+ ram_addr_t saved_addr = current_addr;
+ ram_addr_t addr = 0;
+ int found = 0;
+
+ while (addr < last_ram_offset) {
+ if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
+ uint8_t *p;
+
+ cpu_physical_memory_reset_dirty(current_addr,
+ current_addr + TARGET_PAGE_SIZE,
+ MIGRATION_DIRTY_FLAG);
+
+ p = qemu_get_ram_ptr(current_addr);
+
+ if (is_dup_page(p, *p)) {
+ qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
+ qemu_put_byte(f, *p);
+ } else {
+ qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
+ qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
+ }
+
+ found = 1;
+ break;
+ }
+ addr += TARGET_PAGE_SIZE;
+ current_addr = (saved_addr + addr) % last_ram_offset;
+ }
+
+ return found;
+}
+
+static uint64_t bytes_transferred;
+
+static ram_addr_t ram_save_remaining(void)
+{
+ ram_addr_t addr;
+ ram_addr_t count = 0;
+
+ for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
+ if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG)) {
+ count++;
+ }
+ }
+
+ return count;
+}
+
+uint64_t ram_bytes_remaining(void)
+{
+ return ram_save_remaining() * TARGET_PAGE_SIZE;
+}
+
+uint64_t ram_bytes_transferred(void)
+{
+ return bytes_transferred;
+}
+
+uint64_t ram_bytes_total(void)
+{
+ return last_ram_offset;
+}
+
+int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque)
+{
+ ram_addr_t addr;
+ uint64_t bytes_transferred_last;
+ double bwidth = 0;
+ uint64_t expected_time = 0;
+
+ if (stage < 0) {
+ cpu_physical_memory_set_dirty_tracking(0);
+ return 0;
+ }
+
+ if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
+ qemu_file_set_error(f);
+ return 0;
+ }
+
+ if (stage == 1) {
+ bytes_transferred = 0;
+
+ /* Make sure all dirty bits are set */
+ for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
+ if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG)) {
+ cpu_physical_memory_set_dirty(addr);
+ }
+ }
+
+ /* Enable dirty memory tracking */
+ cpu_physical_memory_set_dirty_tracking(1);
+
+ qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
+ }
+
+ bytes_transferred_last = bytes_transferred;
+ bwidth = qemu_get_clock_ns(rt_clock);
+
+ while (!qemu_file_rate_limit(f)) {
+ int ret;
+
+ ret = ram_save_block(f);
+ bytes_transferred += ret * TARGET_PAGE_SIZE;
+ if (ret == 0) { /* no more blocks */
+ break;
+ }
+ }
+
+ bwidth = qemu_get_clock_ns(rt_clock) - bwidth;
+ bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
+
+ /* if we haven't transferred anything this round, force expected_time to a
+ * a very high value, but without crashing */
+ if (bwidth == 0) {
+ bwidth = 0.000001;
+ }
+
+ /* try transferring iterative blocks of memory */
+ if (stage == 3) {
+ /* flush all remaining blocks regardless of rate limiting */
+ while (ram_save_block(f) != 0) {
+ bytes_transferred += TARGET_PAGE_SIZE;
+ }
+ cpu_physical_memory_set_dirty_tracking(0);
+ }
+
+ qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
+
+ expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
+
+ return (stage == 2) && (expected_time <= migrate_max_downtime());
+}
+
+int ram_load(QEMUFile *f, void *opaque, int version_id)
+{
+ ram_addr_t addr;
+ int flags;
+
+ if (version_id != 3) {
+ return -EINVAL;
+ }
+
+ do {
+ addr = qemu_get_be64(f);
+
+ flags = addr & ~TARGET_PAGE_MASK;
+ addr &= TARGET_PAGE_MASK;
+
+ if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
+ if (addr != last_ram_offset) {
+ return -EINVAL;
+ }
+ }
+
+ if (flags & RAM_SAVE_FLAG_COMPRESS) {
+ uint8_t ch = qemu_get_byte(f);
+ memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
+#ifndef _WIN32
+ if (ch == 0 &&
+ (!kvm_enabled() || kvm_has_sync_mmu())) {
+ madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE,
+ MADV_DONTNEED);
+ }
+#endif
+ } else if (flags & RAM_SAVE_FLAG_PAGE) {
+ qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
+ }
+ if (qemu_file_has_error(f)) {
+ return -EIO;
+ }
+ } while (!(flags & RAM_SAVE_FLAG_EOS));
+
+ return 0;
+}
+
+void qemu_service_io(void)
+{
+ qemu_notify_event();
+}
+
+#ifdef HAS_AUDIO
+struct soundhw soundhw[] = {
+#ifdef HAS_AUDIO_CHOICE
+#if defined(TARGET_I386) || defined(TARGET_MIPS)
+ {
+ "pcspk",
+ "PC speaker",
+ 0,
+ 1,
+ { .init_isa = pcspk_audio_init }
+ },
+#endif
+
+#ifdef CONFIG_SB16
+ {
+ "sb16",
+ "Creative Sound Blaster 16",
+ 0,
+ 1,
+ { .init_isa = SB16_init }
+ },
+#endif
+
+#ifdef CONFIG_CS4231A
+ {
+ "cs4231a",
+ "CS4231A",
+ 0,
+ 1,
+ { .init_isa = cs4231a_init }
+ },
+#endif
+
+#ifdef CONFIG_ADLIB
+ {
+ "adlib",
+#ifdef HAS_YMF262
+ "Yamaha YMF262 (OPL3)",
+#else
+ "Yamaha YM3812 (OPL2)",
+#endif
+ 0,
+ 1,
+ { .init_isa = Adlib_init }
+ },
+#endif
+
+#ifdef CONFIG_GUS
+ {
+ "gus",
+ "Gravis Ultrasound GF1",
+ 0,
+ 1,
+ { .init_isa = GUS_init }
+ },
+#endif
+
+#ifdef CONFIG_AC97
+ {
+ "ac97",
+ "Intel 82801AA AC97 Audio",
+ 0,
+ 0,
+ { .init_pci = ac97_init }
+ },
+#endif
+
+#ifdef CONFIG_ES1370
+ {
+ "es1370",
+ "ENSONIQ AudioPCI ES1370",
+ 0,
+ 0,
+ { .init_pci = es1370_init }
+ },
+#endif
+
+#endif /* HAS_AUDIO_CHOICE */
+
+ { NULL, NULL, 0, 0, { NULL } }
+};
+
+void select_soundhw(const char *optarg)
+{
+ struct soundhw *c;
+
+ if (*optarg == '?') {
+ show_valid_cards:
+
+ printf("Valid sound card names (comma separated):\n");
+ for (c = soundhw; c->name; ++c) {
+ printf ("%-11s %s\n", c->name, c->descr);
+ }
+ printf("\n-soundhw all will enable all of the above\n");
+ exit(*optarg != '?');
+ }
+ else {
+ size_t l;
+ const char *p;
+ char *e;
+ int bad_card = 0;
+
+ if (!strcmp(optarg, "all")) {
+ for (c = soundhw; c->name; ++c) {
+ c->enabled = 1;
+ }
+ return;
+ }
+
+ p = optarg;
+ while (*p) {
+ e = strchr(p, ',');
+ l = !e ? strlen(p) : (size_t) (e - p);
+
+ for (c = soundhw; c->name; ++c) {
+ if (!strncmp(c->name, p, l) && !c->name[l]) {
+ c->enabled = 1;
+ break;
+ }
+ }
+
+ if (!c->name) {
+ if (l > 80) {
+ fprintf(stderr,
+ "Unknown sound card name (too big to show)\n");
+ }
+ else {
+ fprintf(stderr, "Unknown sound card name `%.*s'\n",
+ (int) l, p);
+ }
+ bad_card = 1;
+ }
+ p += l + (e != NULL);
+ }
+
+ if (bad_card) {
+ goto show_valid_cards;
+ }
+ }
+}
+#else
+void select_soundhw(const char *optarg)
+{
+}
+#endif
+
+int qemu_uuid_parse(const char *str, uint8_t *uuid)
+{
+ int ret;
+
+ if (strlen(str) != 36) {
+ return -1;
+ }
+
+ ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
+ &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
+ &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14],
+ &uuid[15]);
+
+ if (ret != 16) {
+ return -1;
+ }
+#ifdef TARGET_I386
+ smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
+#endif
+ return 0;
+}
+
+void do_acpitable_option(const char *optarg)
+{
+#ifdef TARGET_I386
+ if (acpi_table_add(optarg) < 0) {
+ fprintf(stderr, "Wrong acpi table provided\n");
+ exit(1);
+ }
+#endif
+}
+
+void do_smbios_option(const char *optarg)
+{
+#ifdef TARGET_I386
+ if (smbios_entry_add(optarg) < 0) {
+ fprintf(stderr, "Wrong smbios provided\n");
+ exit(1);
+ }
+#endif
+}
+
+void cpudef_init(void)
+{
+#if defined(cpudef_setup)
+ cpudef_setup(); /* parse cpu definitions in target config file */
+#endif
+}
+
+int audio_available(void)
+{
+#ifdef HAS_AUDIO
+ return 1;
+#else
+ return 0;
+#endif
+}
+
+int kvm_available(void)
+{
+#ifdef CONFIG_KVM
+ return 1;
+#else
+ return 0;
+#endif
+}
+
+int xen_available(void)
+{
+#ifdef CONFIG_XEN
+ return 1;
+#else
+ return 0;
+#endif
+}
diff --git a/arch_init.h b/arch_init.h
new file mode 100644
index 0000000000..682890c0ec
--- /dev/null
+++ b/arch_init.h
@@ -0,0 +1,33 @@
+#ifndef QEMU_ARCH_INIT_H
+#define QEMU_ARCH_INIT_H
+
+extern const char arch_config_name[];
+
+enum {
+ QEMU_ARCH_ALL = -1,
+ QEMU_ARCH_ALPHA = 1,
+ QEMU_ARCH_ARM = 2,
+ QEMU_ARCH_CRIS = 4,
+ QEMU_ARCH_I386 = 8,
+ QEMU_ARCH_M68K = 16,
+ QEMU_ARCH_MICROBLAZE = 32,
+ QEMU_ARCH_MIPS = 64,
+ QEMU_ARCH_PPC = 128,
+ QEMU_ARCH_S390X = 256,
+ QEMU_ARCH_SH4 = 512,
+ QEMU_ARCH_SPARC = 1024,
+};
+
+extern const uint32_t arch_type;
+
+void select_soundhw(const char *optarg);
+int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque);
+int ram_load(QEMUFile *f, void *opaque, int version_id);
+void do_acpitable_option(const char *optarg);
+void do_smbios_option(const char *optarg);
+void cpudef_init(void);
+int audio_available(void);
+int kvm_available(void);
+int xen_available(void);
+
+#endif
diff --git a/qemu-options.hx b/qemu-options.hx
index e2a5ca6e5a..719cbda83c 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1,8 +1,9 @@
HXCOMM Use DEFHEADING() to define headings in both help text and texi
HXCOMM Text between STEXI and ETEXI are copied to texi version and
HXCOMM discarded from C version
-HXCOMM DEF(option, HAS_ARG/0, opt_enum, opt_help) is used to construct
-HXCOMM option structures, enums and help message.
+HXCOMM DEF(option, HAS_ARG/0, opt_enum, opt_help, arch_mask) is used to
+HXCOMM construct option structures, enums and help message for specified
+HXCOMM architectures.
HXCOMM HXCOMM can be used for comments, discarded from both texi and C
DEFHEADING(Standard options:)
@@ -11,7 +12,7 @@ STEXI
ETEXI
DEF("help", 0, QEMU_OPTION_h,
- "-h or -help display this help and exit\n")
+ "-h or -help display this help and exit\n", QEMU_ARCH_ALL)
STEXI
@item -h
@findex -h
@@ -19,7 +20,7 @@ Display help and exit
ETEXI
DEF("version", 0, QEMU_OPTION_version,
- "-version display version information and exit\n")
+ "-version display version information and exit\n", QEMU_ARCH_ALL)
STEXI
@item -version
@findex -version
@@ -27,7 +28,7 @@ Display version information and exit
ETEXI
DEF("M", HAS_ARG, QEMU_OPTION_M,
- "-M machine select emulated machine (-M ? for list)\n")
+ "-M machine select emulated machine (-M ? for list)\n", QEMU_ARCH_ALL)
STEXI
@item -M @var{machine}
@findex -M
@@ -35,7 +36,7 @@ Select the emulated @var{machine} (@code{-M ?} for list)
ETEXI
DEF("cpu", HAS_ARG, QEMU_OPTION_cpu,
- "-cpu cpu select CPU (-cpu ? for list)\n")
+ "-cpu cpu select CPU (-cpu ? for list)\n", QEMU_ARCH_ALL)
STEXI
@item -cpu @var{model}
@findex -cpu
@@ -49,7 +50,8 @@ DEF("smp", HAS_ARG, QEMU_OPTION_smp,
" offline CPUs for hotplug, etc\n"
" cores= number of CPU cores on one socket\n"
" threads= number of threads on one CPU core\n"
- " sockets= number of discrete sockets in the system\n")
+ " sockets= number of discrete sockets in the system\n",
+ QEMU_ARCH_ALL)
STEXI
@item -smp @var{n}[,cores=@var{cores}][,threads=@var{threads}][,sockets=@var{sockets}][,maxcpus=@var{maxcpus}]
@findex -smp
@@ -64,7 +66,7 @@ specifies the maximum number of hotpluggable CPUs.
ETEXI
DEF("numa", HAS_ARG, QEMU_OPTION_numa,
- "-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node]\n")
+ "-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node]\n", QEMU_ARCH_ALL)
STEXI
@item -numa @var{opts}
@findex -numa
@@ -73,8 +75,8 @@ are split equally.
ETEXI
DEF("fda", HAS_ARG, QEMU_OPTION_fda,
- "-fda/-fdb file use 'file' as floppy disk 0/1 image\n")
-DEF("fdb", HAS_ARG, QEMU_OPTION_fdb, "")
+ "-fda/-fdb file use 'file' as floppy disk 0/1 image\n", QEMU_ARCH_ALL)
+DEF("fdb", HAS_ARG, QEMU_OPTION_fdb, "", QEMU_ARCH_ALL)
STEXI
@item -fda @var{file}
@item -fdb @var{file}
@@ -85,11 +87,11 @@ use the host floppy by using @file{/dev/fd0} as filename (@pxref{host_drives}).
ETEXI
DEF("hda", HAS_ARG, QEMU_OPTION_hda,
- "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n")
-DEF("hdb", HAS_ARG, QEMU_OPTION_hdb, "")
+ "-hda/-hdb file use 'file' as IDE hard disk 0/1 image\n", QEMU_ARCH_ALL)
+DEF("hdb", HAS_ARG, QEMU_OPTION_hdb, "", QEMU_ARCH_ALL)
DEF("hdc", HAS_ARG, QEMU_OPTION_hdc,
- "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n")
-DEF("hdd", HAS_ARG, QEMU_OPTION_hdd, "")
+ "-hdc/-hdd file use 'file' as IDE hard disk 2/3 image\n", QEMU_ARCH_ALL)
+DEF("hdd", HAS_ARG, QEMU_OPTION_hdd, "", QEMU_ARCH_ALL)
STEXI
@item -hda @var{file}
@item -hdb @var{file}
@@ -103,7 +105,8 @@ Use @var{file} as hard disk 0, 1, 2 or 3 image (@pxref{disk_images}).
ETEXI
DEF("cdrom", HAS_ARG, QEMU_OPTION_cdrom,
- "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n")
+ "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -cdrom @var{file}
@findex -cdrom
@@ -117,7 +120,7 @@ DEF("drive", HAS_ARG, QEMU_OPTION_drive,
" [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n"
" [,cache=writethrough|writeback|none][,format=f][,serial=s]\n"
" [,addr=A][,id=name][,aio=threads|native][,readonly=on|off]\n"
- " use 'file' as a drive image\n")
+ " use 'file' as a drive image\n", QEMU_ARCH_ALL)
STEXI
@item -drive @var{option}[,@var{option}[,@var{option}[,...]]]
@findex -drive
@@ -226,7 +229,7 @@ ETEXI
DEF("set", HAS_ARG, QEMU_OPTION_set,
"-set group.id.arg=value\n"
" set <arg> parameter for item <id> of type <group>\n"
- " i.e. -set drive.$id.file=/path/to/image\n")
+ " i.e. -set drive.$id.file=/path/to/image\n", QEMU_ARCH_ALL)
STEXI
@item -set
@findex -set
@@ -235,7 +238,8 @@ ETEXI
DEF("global", HAS_ARG, QEMU_OPTION_global,
"-global driver.property=value\n"
- " set a global default for a driver property\n")
+ " set a global default for a driver property\n",
+ QEMU_ARCH_ALL)
STEXI
@item -global
@findex -global
@@ -243,7 +247,8 @@ TODO
ETEXI
DEF("mtdblock", HAS_ARG, QEMU_OPTION_mtdblock,
- "-mtdblock file use 'file' as on-board Flash memory image\n")
+ "-mtdblock file use 'file' as on-board Flash memory image\n",
+ QEMU_ARCH_ALL)
STEXI
@item -mtdblock @var{file}
@findex -mtdblock
@@ -251,7 +256,7 @@ Use @var{file} as on-board Flash memory image.
ETEXI
DEF("sd", HAS_ARG, QEMU_OPTION_sd,
- "-sd file use 'file' as SecureDigital card image\n")
+ "-sd file use 'file' as SecureDigital card image\n", QEMU_ARCH_ALL)
STEXI
@item -sd @var{file}
@findex -sd
@@ -259,7 +264,7 @@ Use @var{file} as SecureDigital card image.
ETEXI
DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
- "-pflash file use 'file' as a parallel flash image\n")
+ "-pflash file use 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
STEXI
@item -pflash @var{file}
@findex -pflash
@@ -268,7 +273,8 @@ ETEXI
DEF("boot", HAS_ARG, QEMU_OPTION_boot,
"-boot [order=drives][,once=drives][,menu=on|off]\n"
- " 'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)\n")
+ " 'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -boot [order=@var{drives}][,once=@var{drives}][,menu=on|off]
@findex -boot
@@ -294,7 +300,8 @@ use is discouraged as it may be removed from future versions.
ETEXI
DEF("snapshot", 0, QEMU_OPTION_snapshot,
- "-snapshot write to temporary files instead of disk image files\n")
+ "-snapshot write to temporary files instead of disk image files\n",
+ QEMU_ARCH_ALL)
STEXI
@item -snapshot
@findex -snapshot
@@ -305,7 +312,7 @@ ETEXI
DEF("m", HAS_ARG, QEMU_OPTION_m,
"-m megs set virtual RAM size to megs MB [default="
- stringify(DEFAULT_RAM_SIZE) "]\n")
+ stringify(DEFAULT_RAM_SIZE) "]\n", QEMU_ARCH_ALL)
STEXI
@item -m @var{megs}
@findex -m
@@ -315,7 +322,7 @@ gigabytes respectively.
ETEXI
DEF("mem-path", HAS_ARG, QEMU_OPTION_mempath,
- "-mem-path FILE provide backing storage for guest RAM\n")
+ "-mem-path FILE provide backing storage for guest RAM\n", QEMU_ARCH_ALL)
STEXI
@item -mem-path @var{path}
Allocate guest RAM from a temporarily created file in @var{path}.
@@ -323,7 +330,8 @@ ETEXI
#ifdef MAP_POPULATE
DEF("mem-prealloc", 0, QEMU_OPTION_mem_prealloc,
- "-mem-prealloc preallocate guest memory (use with -mem-path)\n")
+ "-mem-prealloc preallocate guest memory (use with -mem-path)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -mem-prealloc
Preallocate memory when using -mem-path.
@@ -331,7 +339,8 @@ ETEXI
#endif
DEF("k", HAS_ARG, QEMU_OPTION_k,
- "-k language use keyboard layout (for example 'fr' for French)\n")
+ "-k language use keyboard layout (for example 'fr' for French)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -k @var{language}
@findex -k
@@ -352,10 +361,9 @@ The default is @code{en-us}.
ETEXI
-#ifdef HAS_AUDIO
DEF("audio-help", 0, QEMU_OPTION_audio_help,
- "-audio-help print list of audio drivers and their options\n")
-#endif
+ "-audio-help print list of audio drivers and their options\n",
+ QEMU_ARCH_ALL)
STEXI
@item -audio-help
@findex -audio-help
@@ -363,13 +371,11 @@ Will show the audio subsystem help: list of drivers, tunable
parameters.
ETEXI
-#ifdef HAS_AUDIO
DEF("soundhw", HAS_ARG, QEMU_OPTION_soundhw,
"-soundhw c1,... enable audio support\n"
" and only specified sound cards (comma separated list)\n"
" use -soundhw ? to get the list of supported cards\n"
- " use -soundhw all to enable all of them\n")
-#endif
+ " use -soundhw all to enable all of them\n", QEMU_ARCH_ALL)
STEXI
@item -soundhw @var{card1}[,@var{card2},...] or -soundhw all
@findex -soundhw
@@ -397,7 +403,8 @@ STEXI
ETEXI
DEF("usb", 0, QEMU_OPTION_usb,
- "-usb enable the USB driver (will be the default soon)\n")
+ "-usb enable the USB driver (will be the default soon)\n",
+ QEMU_ARCH_ALL)
STEXI
USB options:
@table @option
@@ -408,7 +415,8 @@ Enable the USB driver (will be the default soon)
ETEXI
DEF("usbdevice", HAS_ARG, QEMU_OPTION_usbdevice,
- "-usbdevice name add the host or guest USB device 'name'\n")
+ "-usbdevice name add the host or guest USB device 'name'\n",
+ QEMU_ARCH_ALL)
STEXI
@item -usbdevice @var{devname}
@@ -457,7 +465,8 @@ DEF("device", HAS_ARG, QEMU_OPTION_device,
" prop=value,... sets driver properties\n"
" use -device ? to print all possible drivers\n"
" use -device driver,? to print all possible options\n"
- " use -device driver,option=? to print a help for value\n")
+ " use -device driver,option=? to print a help for value\n",
+ QEMU_ARCH_ALL)
STEXI
@item -device @var{driver}[,@var{option}[=@var{value}][,...]]
@findex -device
@@ -472,7 +481,8 @@ ETEXI
DEF("name", HAS_ARG, QEMU_OPTION_name,
"-name string1[,process=string2]\n"
" set the name of the guest\n"
- " string1 sets the window title and string2 the process name (on Linux)\n")
+ " string1 sets the window title and string2 the process name (on Linux)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -name @var{name}
@findex -name
@@ -484,7 +494,7 @@ ETEXI
DEF("uuid", HAS_ARG, QEMU_OPTION_uuid,
"-uuid %08x-%04x-%04x-%04x-%012x\n"
- " specify machine UUID\n")
+ " specify machine UUID\n", QEMU_ARCH_ALL)
STEXI
@item -uuid @var{uuid}
@findex -uuid
@@ -504,7 +514,8 @@ STEXI
ETEXI
DEF("nographic", 0, QEMU_OPTION_nographic,
- "-nographic disable graphical output and redirect serial I/Os to console\n")
+ "-nographic disable graphical output and redirect serial I/Os to console\n",
+ QEMU_ARCH_ALL)
STEXI
@item -nographic
@findex -nographic
@@ -517,7 +528,8 @@ ETEXI
#ifdef CONFIG_CURSES
DEF("curses", 0, QEMU_OPTION_curses,
- "-curses use a curses/ncurses interface instead of SDL\n")
+ "-curses use a curses/ncurses interface instead of SDL\n",
+ QEMU_ARCH_ALL)
#endif
STEXI
@item -curses
@@ -529,7 +541,8 @@ ETEXI
#ifdef CONFIG_SDL
DEF("no-frame", 0, QEMU_OPTION_no_frame,
- "-no-frame open SDL window without a frame and window decorations\n")
+ "-no-frame open SDL window without a frame and window decorations\n",
+ QEMU_ARCH_ALL)
#endif
STEXI
@item -no-frame
@@ -541,7 +554,8 @@ ETEXI
#ifdef CONFIG_SDL
DEF("alt-grab", 0, QEMU_OPTION_alt_grab,
- "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n")
+ "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n",
+ QEMU_ARCH_ALL)
#endif
STEXI
@item -alt-grab
@@ -551,7 +565,8 @@ ETEXI
#ifdef CONFIG_SDL
DEF("ctrl-grab", 0, QEMU_OPTION_ctrl_grab,
- "-ctrl-grab use Right-Ctrl to grab mouse (instead of Ctrl-Alt)\n")
+ "-ctrl-grab use Right-Ctrl to grab mouse (instead of Ctrl-Alt)\n",
+ QEMU_ARCH_ALL)
#endif
STEXI
@item -ctrl-grab
@@ -561,7 +576,7 @@ ETEXI
#ifdef CONFIG_SDL
DEF("no-quit", 0, QEMU_OPTION_no_quit,
- "-no-quit disable SDL window close capability\n")
+ "-no-quit disable SDL window close capability\n", QEMU_ARCH_ALL)
#endif
STEXI
@item -no-quit
@@ -571,7 +586,7 @@ ETEXI
#ifdef CONFIG_SDL
DEF("sdl", 0, QEMU_OPTION_sdl,
- "-sdl enable SDL\n")
+ "-sdl enable SDL\n", QEMU_ARCH_ALL)
#endif
STEXI
@item -sdl
@@ -580,7 +595,8 @@ Enable SDL.
ETEXI
DEF("portrait", 0, QEMU_OPTION_portrait,
- "-portrait rotate graphical output 90 deg left (only PXA LCD)\n")
+ "-portrait rotate graphical output 90 deg left (only PXA LCD)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -portrait
@findex -portrait
@@ -589,7 +605,7 @@ ETEXI
DEF("vga", HAS_ARG, QEMU_OPTION_vga,
"-vga [std|cirrus|vmware|xenfb|none]\n"
- " select video card type\n")
+ " select video card type\n", QEMU_ARCH_ALL)
STEXI
@item -vga @var{type}
@findex -vga
@@ -615,17 +631,16 @@ Disable VGA card.
ETEXI
DEF("full-screen", 0, QEMU_OPTION_full_screen,
- "-full-screen start in full screen\n")
+ "-full-screen start in full screen\n", QEMU_ARCH_ALL)
STEXI
@item -full-screen
@findex -full-screen
Start in full screen.
ETEXI
-#if defined(TARGET_PPC) || defined(TARGET_SPARC)
DEF("g", 1, QEMU_OPTION_g ,
- "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n")
-#endif
+ "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n",
+ QEMU_ARCH_PPC | QEMU_ARCH_SPARC)
STEXI
@item -g @var{width}x@var{height}[x@var{depth}]
@findex -g
@@ -633,7 +648,7 @@ Set the initial graphical resolution and depth (PPC, SPARC only).
ETEXI
DEF("vnc", HAS_ARG, QEMU_OPTION_vnc ,
- "-vnc display start a VNC server on display\n")
+ "-vnc display start a VNC server on display\n", QEMU_ARCH_ALL)
STEXI
@item -vnc @var{display}[,@var{option}[,@var{option}[,...]]]
@findex -vnc
@@ -749,17 +764,14 @@ ETEXI
DEFHEADING()
-#ifdef TARGET_I386
DEFHEADING(i386 target only:)
-#endif
STEXI
@table @option
ETEXI
-#ifdef TARGET_I386
DEF("win2k-hack", 0, QEMU_OPTION_win2k_hack,
- "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n")
-#endif
+ "-win2k-hack use it when installing Windows 2000 to avoid a disk full bug\n",
+ QEMU_ARCH_I386)
STEXI
@item -win2k-hack
@findex -win2k-hack
@@ -768,15 +780,12 @@ Windows 2000 is installed, you no longer need this option (this option
slows down the IDE transfers).
ETEXI
-#ifdef TARGET_I386
HXCOMM Deprecated by -rtc
-DEF("rtc-td-hack", 0, QEMU_OPTION_rtc_td_hack, "")
-#endif
+DEF("rtc-td-hack", 0, QEMU_OPTION_rtc_td_hack, "", QEMU_ARCH_I386)
-#ifdef TARGET_I386
DEF("no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk,
- "-no-fd-bootchk disable boot signature checking for floppy disks\n")
-#endif
+ "-no-fd-bootchk disable boot signature checking for floppy disks\n",
+ QEMU_ARCH_I386)
STEXI
@item -no-fd-bootchk
@findex -no-fd-bootchk
@@ -785,10 +794,8 @@ be needed to boot from old floppy disks.
TODO: check reference to Bochs BIOS.
ETEXI
-#ifdef TARGET_I386
DEF("no-acpi", 0, QEMU_OPTION_no_acpi,
- "-no-acpi disable ACPI\n")
-#endif
+ "-no-acpi disable ACPI\n", QEMU_ARCH_I386)
STEXI
@item -no-acpi
@findex -no-acpi
@@ -797,22 +804,18 @@ it if your guest OS complains about ACPI problems (PC target machine
only).
ETEXI
-#ifdef TARGET_I386
DEF("no-hpet", 0, QEMU_OPTION_no_hpet,
- "-no-hpet disable HPET\n")
-#endif
+ "-no-hpet disable HPET\n", QEMU_ARCH_I386)
STEXI
@item -no-hpet
@findex -no-hpet
Disable HPET support.
ETEXI
-#ifdef TARGET_I386
DEF("balloon", HAS_ARG, QEMU_OPTION_balloon,
"-balloon none disable balloon device\n"
"-balloon virtio[,addr=str]\n"
- " enable virtio balloon device (default)\n")
-#endif
+ " enable virtio balloon device (default)\n", QEMU_ARCH_ALL)
STEXI
@item -balloon none
@findex -balloon
@@ -822,18 +825,15 @@ Enable virtio balloon device (default), optionally with PCI address
@var{addr}.
ETEXI
-#ifdef TARGET_I386
DEF("acpitable", HAS_ARG, QEMU_OPTION_acpitable,
"-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]\n"
- " ACPI table description\n")
-#endif
+ " ACPI table description\n", QEMU_ARCH_I386)
STEXI
@item -acpitable [sig=@var{str}][,rev=@var{n}][,oem_id=@var{str}][,oem_table_id=@var{str}][,oem_rev=@var{n}] [,asl_compiler_id=@var{str}][,asl_compiler_rev=@var{n}][,data=@var{file1}[:@var{file2}]...]
@findex -acpitable
Add ACPI table with specified header fields and context from specified files.
ETEXI
-#ifdef TARGET_I386
DEF("smbios", HAS_ARG, QEMU_OPTION_smbios,
"-smbios file=binary\n"
" load SMBIOS entry from binary file\n"
@@ -841,8 +841,7 @@ DEF("smbios", HAS_ARG, QEMU_OPTION_smbios,
" specify SMBIOS type 0 fields\n"
"-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]\n"
" [,uuid=uuid][,sku=str][,family=str]\n"
- " specify SMBIOS type 1 fields\n")
-#endif
+ " specify SMBIOS type 1 fields\n", QEMU_ARCH_I386)
STEXI
@item -smbios file=@var{binary}
@findex -smbios
@@ -856,9 +855,7 @@ Specify SMBIOS type 0 fields
Specify SMBIOS type 1 fields
ETEXI
-#ifdef TARGET_I386
DEFHEADING()
-#endif
STEXI
@end table
ETEXI
@@ -870,11 +867,11 @@ ETEXI
HXCOMM Legacy slirp options (now moved to -net user):
#ifdef CONFIG_SLIRP
-DEF("tftp", HAS_ARG, QEMU_OPTION_tftp, "")
-DEF("bootp", HAS_ARG, QEMU_OPTION_bootp, "")
-DEF("redir", HAS_ARG, QEMU_OPTION_redir, "")
+DEF("tftp", HAS_ARG, QEMU_OPTION_tftp, "", QEMU_ARCH_ALL)
+DEF("bootp", HAS_ARG, QEMU_OPTION_bootp, "", QEMU_ARCH_ALL)
+DEF("redir", HAS_ARG, QEMU_OPTION_redir, "", QEMU_ARCH_ALL)
#ifndef _WIN32
-DEF("smb", HAS_ARG, QEMU_OPTION_smb, "")
+DEF("smb", HAS_ARG, QEMU_OPTION_smb, "", QEMU_ARCH_ALL)
#endif
#endif
@@ -920,7 +917,7 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
"-net dump[,vlan=n][,file=f][,len=n]\n"
" dump traffic on vlan 'n' to file 'f' (max n bytes per packet)\n"
"-net none use it alone to have zero network devices. If no -net option\n"
- " is provided, the default is '-net nic -net user'\n")
+ " is provided, the default is '-net nic -net user'\n", QEMU_ARCH_ALL)
DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
"-netdev ["
#ifdef CONFIG_SLIRP
@@ -930,7 +927,7 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
#ifdef CONFIG_VDE
"vde|"
#endif
- "socket],id=str[,option][,option][,...]\n")
+ "socket],id=str[,option][,option][,...]\n", QEMU_ARCH_ALL)
STEXI
@item -net nic[,vlan=@var{n}][,macaddr=@var{mac}][,model=@var{type}] [,name=@var{name}][,addr=@var{addr}][,vectors=@var{v}]
@findex -net
@@ -1203,6 +1200,7 @@ DEF("chardev", HAS_ARG, QEMU_OPTION_chardev,
#if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__)
"-chardev parport,id=id,path=path\n"
#endif
+ , QEMU_ARCH_ALL
)
STEXI
@@ -1410,7 +1408,8 @@ DEF("bt", HAS_ARG, QEMU_OPTION_bt, \
"-bt vhci[,vlan=n]\n" \
" add host computer to virtual scatternet 'n' using VHCI\n" \
"-bt device:dev[,vlan=n]\n" \
- " emulate a bluetooth device 'dev' in scatternet 'n'\n")
+ " emulate a bluetooth device 'dev' in scatternet 'n'\n",
+ QEMU_ARCH_ALL)
STEXI
@table @option
@@ -1481,7 +1480,7 @@ for easier testing of various kernels.
ETEXI
DEF("kernel", HAS_ARG, QEMU_OPTION_kernel, \
- "-kernel bzImage use 'bzImage' as kernel image\n")
+ "-kernel bzImage use 'bzImage' as kernel image\n", QEMU_ARCH_ALL)
STEXI
@item -kernel @var{bzImage}
@findex -kernel
@@ -1490,7 +1489,7 @@ or in multiboot format.
ETEXI
DEF("append", HAS_ARG, QEMU_OPTION_append, \
- "-append cmdline use 'cmdline' as kernel command line\n")
+ "-append cmdline use 'cmdline' as kernel command line\n", QEMU_ARCH_ALL)
STEXI
@item -append @var{cmdline}
@findex -append
@@ -1498,7 +1497,7 @@ Use @var{cmdline} as kernel command line
ETEXI
DEF("initrd", HAS_ARG, QEMU_OPTION_initrd, \
- "-initrd file use 'file' as initial ram disk\n")
+ "-initrd file use 'file' as initial ram disk\n", QEMU_ARCH_ALL)
STEXI
@item -initrd @var{file}
@findex -initrd
@@ -1525,7 +1524,8 @@ STEXI
ETEXI
DEF("serial", HAS_ARG, QEMU_OPTION_serial, \
- "-serial dev redirect the serial port to char device 'dev'\n")
+ "-serial dev redirect the serial port to char device 'dev'\n",
+ QEMU_ARCH_ALL)
STEXI
@item -serial @var{dev}
@findex -serial
@@ -1653,7 +1653,8 @@ Three button serial mouse. Configure the guest to use Microsoft protocol.
ETEXI
DEF("parallel", HAS_ARG, QEMU_OPTION_parallel, \
- "-parallel dev redirect the parallel port to char device 'dev'\n")
+ "-parallel dev redirect the parallel port to char device 'dev'\n",
+ QEMU_ARCH_ALL)
STEXI
@item -parallel @var{dev}
@findex -parallel
@@ -1669,7 +1670,8 @@ Use @code{-parallel none} to disable all parallel ports.
ETEXI
DEF("monitor", HAS_ARG, QEMU_OPTION_monitor, \
- "-monitor dev redirect the monitor to char device 'dev'\n")
+ "-monitor dev redirect the monitor to char device 'dev'\n",
+ QEMU_ARCH_ALL)
STEXI
@item -monitor @var{dev}
@findex -monitor
@@ -1679,7 +1681,8 @@ The default device is @code{vc} in graphical mode and @code{stdio} in
non graphical mode.
ETEXI
DEF("qmp", HAS_ARG, QEMU_OPTION_qmp, \
- "-qmp dev like -monitor but opens in 'control' mode\n")
+ "-qmp dev like -monitor but opens in 'control' mode\n",
+ QEMU_ARCH_ALL)
STEXI
@item -qmp @var{dev}
@findex -qmp
@@ -1687,7 +1690,7 @@ Like -monitor but opens in 'control' mode.
ETEXI
DEF("mon", HAS_ARG, QEMU_OPTION_mon, \
- "-mon chardev=[name][,mode=readline|control][,default]\n")
+ "-mon chardev=[name][,mode=readline|control][,default]\n", QEMU_ARCH_ALL)
STEXI
@item -mon chardev=[name][,mode=readline|control][,default]
@findex -mon
@@ -1695,7 +1698,8 @@ Setup monitor on chardev @var{name}.
ETEXI
DEF("debugcon", HAS_ARG, QEMU_OPTION_debugcon, \
- "-debugcon dev redirect the debug console to char device 'dev'\n")
+ "-debugcon dev redirect the debug console to char device 'dev'\n",
+ QEMU_ARCH_ALL)
STEXI
@item -debugcon @var{dev}
@findex -debugcon
@@ -1707,7 +1711,7 @@ non graphical mode.
ETEXI
DEF("pidfile", HAS_ARG, QEMU_OPTION_pidfile, \
- "-pidfile file write PID to 'file'\n")
+ "-pidfile file write PID to 'file'\n", QEMU_ARCH_ALL)
STEXI
@item -pidfile @var{file}
@findex -pidfile
@@ -1716,7 +1720,7 @@ from a script.
ETEXI
DEF("singlestep", 0, QEMU_OPTION_singlestep, \
- "-singlestep always run in singlestep mode\n")
+ "-singlestep always run in singlestep mode\n", QEMU_ARCH_ALL)
STEXI
@item -singlestep
@findex -singlestep
@@ -1724,7 +1728,8 @@ Run the emulation in single step mode.
ETEXI
DEF("S", 0, QEMU_OPTION_S, \
- "-S freeze CPU at startup (use 'c' to start execution)\n")
+ "-S freeze CPU at startup (use 'c' to start execution)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -S
@findex -S
@@ -1732,7 +1737,7 @@ Do not start CPU at startup (you must type 'c' in the monitor).
ETEXI
DEF("gdb", HAS_ARG, QEMU_OPTION_gdb, \
- "-gdb dev wait for gdb connection on 'dev'\n")
+ "-gdb dev wait for gdb connection on 'dev'\n", QEMU_ARCH_ALL)
STEXI
@item -gdb @var{dev}
@findex -gdb
@@ -1746,7 +1751,8 @@ within gdb and establish the connection via a pipe:
ETEXI
DEF("s", 0, QEMU_OPTION_s, \
- "-s shorthand for -gdb tcp::" DEFAULT_GDBSTUB_PORT "\n")
+ "-s shorthand for -gdb tcp::" DEFAULT_GDBSTUB_PORT "\n",
+ QEMU_ARCH_ALL)
STEXI
@item -s
@findex -s
@@ -1755,7 +1761,8 @@ Shorthand for -gdb tcp::1234, i.e. open a gdbserver on TCP port 1234
ETEXI
DEF("d", HAS_ARG, QEMU_OPTION_d, \
- "-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items)\n")
+ "-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -d
@findex -d
@@ -1765,7 +1772,8 @@ ETEXI
DEF("hdachs", HAS_ARG, QEMU_OPTION_hdachs, \
"-hdachs c,h,s[,t]\n" \
" force hard disk 0 physical geometry and the optional BIOS\n" \
- " translation (t=none or lba) (usually qemu can guess them)\n")
+ " translation (t=none or lba) (usually qemu can guess them)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -hdachs @var{c},@var{h},@var{s},[,@var{t}]
@findex -hdachs
@@ -1777,7 +1785,8 @@ images.
ETEXI
DEF("L", HAS_ARG, QEMU_OPTION_L, \
- "-L path set the directory for the BIOS, VGA BIOS and keymaps\n")
+ "-L path set the directory for the BIOS, VGA BIOS and keymaps\n",
+ QEMU_ARCH_ALL)
STEXI
@item -L @var{path}
@findex -L
@@ -1785,17 +1794,15 @@ Set the directory for the BIOS, VGA BIOS and keymaps.
ETEXI
DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
- "-bios file set the filename for the BIOS\n")
+ "-bios file set the filename for the BIOS\n", QEMU_ARCH_ALL)
STEXI
@item -bios @var{file}
@findex -bios
Set the filename for the BIOS.
ETEXI
-#ifdef CONFIG_KVM
DEF("enable-kvm", 0, QEMU_OPTION_enable_kvm, \
- "-enable-kvm enable KVM full virtualization support\n")
-#endif
+ "-enable-kvm enable KVM full virtualization support\n", QEMU_ARCH_ALL)
STEXI
@item -enable-kvm
@findex -enable-kvm
@@ -1803,16 +1810,16 @@ Enable KVM full virtualization support. This option is only available
if KVM support is enabled when compiling.
ETEXI
-#ifdef CONFIG_XEN
DEF("xen-domid", HAS_ARG, QEMU_OPTION_xen_domid,
- "-xen-domid id specify xen guest domain id\n")
+ "-xen-domid id specify xen guest domain id\n", QEMU_ARCH_ALL)
DEF("xen-create", 0, QEMU_OPTION_xen_create,
"-xen-create create domain using xen hypercalls, bypassing xend\n"
- " warning: should not be used when xend is in use\n")
+ " warning: should not be used when xend is in use\n",
+ QEMU_ARCH_ALL)
DEF("xen-attach", 0, QEMU_OPTION_xen_attach,
"-xen-attach attach to existing xen domain\n"
- " xend will use this when starting qemu\n")
-#endif
+ " xend will use this when starting qemu\n",
+ QEMU_ARCH_ALL)
STEXI
@item -xen-domid @var{id}
@findex -xen-domid
@@ -1828,7 +1835,7 @@ xend will use this when starting qemu (XEN only).
ETEXI
DEF("no-reboot", 0, QEMU_OPTION_no_reboot, \
- "-no-reboot exit instead of rebooting\n")
+ "-no-reboot exit instead of rebooting\n", QEMU_ARCH_ALL)
STEXI
@item -no-reboot
@findex -no-reboot
@@ -1836,7 +1843,7 @@ Exit instead of rebooting.
ETEXI
DEF("no-shutdown", 0, QEMU_OPTION_no_shutdown, \
- "-no-shutdown stop before shutdown\n")
+ "-no-shutdown stop before shutdown\n", QEMU_ARCH_ALL)
STEXI
@item -no-shutdown
@findex -no-shutdown
@@ -1847,7 +1854,8 @@ ETEXI
DEF("loadvm", HAS_ARG, QEMU_OPTION_loadvm, \
"-loadvm [tag|id]\n" \
- " start right away with a saved state (loadvm in monitor)\n")
+ " start right away with a saved state (loadvm in monitor)\n",
+ QEMU_ARCH_ALL)
STEXI
@item -loadvm @var{file}
@findex -loadvm
@@ -1856,7 +1864,7 @@ ETEXI
#ifndef _WIN32
DEF("daemonize", 0, QEMU_OPTION_daemonize, \
- "-daemonize daemonize QEMU after initializing\n")
+ "-daemonize daemonize QEMU after initializing\n", QEMU_ARCH_ALL)
#endif
STEXI
@item -daemonize
@@ -1868,7 +1876,8 @@ to cope with initialization race conditions.
ETEXI
DEF("option-rom", HAS_ARG, QEMU_OPTION_option_rom, \
- "-option-rom rom load a file, rom, into the option ROM space\n")
+ "-option-rom rom load a file, rom, into the option ROM space\n",
+ QEMU_ARCH_ALL)
STEXI
@item -option-rom @var{file}
@findex -option-rom
@@ -1878,7 +1887,8 @@ ETEXI
DEF("clock", HAS_ARG, QEMU_OPTION_clock, \
"-clock force the use of the given methods for timer alarm.\n" \
- " To see what timers are available use -clock ?\n")
+ " To see what timers are available use -clock ?\n",
+ QEMU_ARCH_ALL)
STEXI
@item -clock @var{method}
@findex -clock
@@ -1887,18 +1897,13 @@ are available use -clock ?.
ETEXI
HXCOMM Options deprecated by -rtc
-DEF("localtime", 0, QEMU_OPTION_localtime, "")
-DEF("startdate", HAS_ARG, QEMU_OPTION_startdate, "")
+DEF("localtime", 0, QEMU_OPTION_localtime, "", QEMU_ARCH_ALL)
+DEF("startdate", HAS_ARG, QEMU_OPTION_startdate, "", QEMU_ARCH_ALL)
-#ifdef TARGET_I386
DEF("rtc", HAS_ARG, QEMU_OPTION_rtc, \
"-rtc [base=utc|localtime|date][,clock=host|vm][,driftfix=none|slew]\n" \
- " set the RTC base and clock, enable drift fix for clock ticks\n")
-#else
-DEF("rtc", HAS_ARG, QEMU_OPTION_rtc, \
- "-rtc [base=utc|localtime|date][,clock=host|vm]\n" \
- " set the RTC base and clock\n")
-#endif
+ " set the RTC base and clock, enable drift fix for clock ticks (x86 only)\n",
+ QEMU_ARCH_ALL)
STEXI
@@ -1924,7 +1929,7 @@ ETEXI
DEF("icount", HAS_ARG, QEMU_OPTION_icount, \
"-icount [N|auto]\n" \
" enable virtual instruction counter with 2^N clock ticks per\n" \
- " instruction\n")
+ " instruction\n", QEMU_ARCH_ALL)
STEXI
@item -icount [@var{N}|auto]
@findex -icount
@@ -1941,7 +1946,8 @@ ETEXI
DEF("watchdog", HAS_ARG, QEMU_OPTION_watchdog, \
"-watchdog i6300esb|ib700\n" \
- " enable virtual hardware watchdog [default=none]\n")
+ " enable virtual hardware watchdog [default=none]\n",
+ QEMU_ARCH_ALL)
STEXI
@item -watchdog @var{model}
@findex -watchdog
@@ -1961,7 +1967,8 @@ ETEXI
DEF("watchdog-action", HAS_ARG, QEMU_OPTION_watchdog_action, \
"-watchdog-action reset|shutdown|poweroff|pause|debug|none\n" \
- " action when watchdog fires [default=reset]\n")
+ " action when watchdog fires [default=reset]\n",
+ QEMU_ARCH_ALL)
STEXI
@item -watchdog-action @var{action}
@@ -1990,7 +1997,8 @@ Examples:
ETEXI
DEF("echr", HAS_ARG, QEMU_OPTION_echr, \
- "-echr chr set terminal escape character instead of ctrl-a\n")
+ "-echr chr set terminal escape character instead of ctrl-a\n",
+ QEMU_ARCH_ALL)
STEXI
@item -echr @var{numeric_ascii_value}
@@ -2010,7 +2018,7 @@ ETEXI
DEF("virtioconsole", HAS_ARG, QEMU_OPTION_virtiocon, \
"-virtioconsole c\n" \
- " set virtio console\n")
+ " set virtio console\n", QEMU_ARCH_ALL)
STEXI
@item -virtioconsole @var{c}
@findex -virtioconsole
@@ -2022,7 +2030,7 @@ Please use @code{-device virtconsole} for the new way of invocation.
ETEXI
DEF("show-cursor", 0, QEMU_OPTION_show_cursor, \
- "-show-cursor show cursor\n")
+ "-show-cursor show cursor\n", QEMU_ARCH_ALL)
STEXI
@item -show-cursor
@findex -show-cursor
@@ -2030,7 +2038,7 @@ Show cursor.
ETEXI
DEF("tb-size", HAS_ARG, QEMU_OPTION_tb_size, \
- "-tb-size n set TB size\n")
+ "-tb-size n set TB size\n", QEMU_ARCH_ALL)
STEXI
@item -tb-size @var{n}
@findex -tb-size
@@ -2038,7 +2046,8 @@ Set TB size.
ETEXI
DEF("incoming", HAS_ARG, QEMU_OPTION_incoming, \
- "-incoming p prepare for incoming migration, listen on port p\n")
+ "-incoming p prepare for incoming migration, listen on port p\n",
+ QEMU_ARCH_ALL)
STEXI
@item -incoming @var{port}
@findex -incoming
@@ -2046,7 +2055,7 @@ Prepare for incoming migration, listen on @var{port}.
ETEXI
DEF("nodefaults", 0, QEMU_OPTION_nodefaults, \
- "-nodefaults don't create default devices\n")
+ "-nodefaults don't create default devices\n", QEMU_ARCH_ALL)
STEXI
@item -nodefaults
@findex -nodefaults
@@ -2055,7 +2064,8 @@ ETEXI
#ifndef _WIN32
DEF("chroot", HAS_ARG, QEMU_OPTION_chroot, \
- "-chroot dir chroot to dir just before starting the VM\n")
+ "-chroot dir chroot to dir just before starting the VM\n",
+ QEMU_ARCH_ALL)
#endif
STEXI
@item -chroot @var{dir}
@@ -2066,7 +2076,8 @@ ETEXI
#ifndef _WIN32
DEF("runas", HAS_ARG, QEMU_OPTION_runas, \
- "-runas user change to user id user just before starting the VM\n")
+ "-runas user change to user id user just before starting the VM\n",
+ QEMU_ARCH_ALL)
#endif
STEXI
@item -runas @var{user}
@@ -2075,29 +2086,24 @@ Immediately before starting guest execution, drop root privileges, switching
to the specified user.
ETEXI
-#if defined(TARGET_SPARC) || defined(TARGET_PPC)
DEF("prom-env", HAS_ARG, QEMU_OPTION_prom_env,
"-prom-env variable=value\n"
- " set OpenBIOS nvram variables\n")
-#endif
+ " set OpenBIOS nvram variables\n",
+ QEMU_ARCH_PPC | QEMU_ARCH_SPARC)
STEXI
@item -prom-env @var{variable}=@var{value}
@findex -prom-env
Set OpenBIOS nvram @var{variable} to given @var{value} (PPC, SPARC only).
ETEXI
-#if defined(TARGET_ARM) || defined(TARGET_M68K)
DEF("semihosting", 0, QEMU_OPTION_semihosting,
- "-semihosting semihosting mode\n")
-#endif
+ "-semihosting semihosting mode\n", QEMU_ARCH_ARM | QEMU_ARCH_M68K)
STEXI
@item -semihosting
@findex -semihosting
Semihosting mode (ARM, M68K only).
ETEXI
-#if defined(TARGET_ARM)
DEF("old-param", 0, QEMU_OPTION_old_param,
- "-old-param old param mode\n")
-#endif
+ "-old-param old param mode\n", QEMU_ARCH_ARM)
STEXI
@item -old-param
@findex -old-param (ARM)
@@ -2105,7 +2111,7 @@ Old param mode (ARM only).
ETEXI
DEF("readconfig", HAS_ARG, QEMU_OPTION_readconfig,
- "-readconfig <file>\n")
+ "-readconfig <file>\n", QEMU_ARCH_ALL)
STEXI
@item -readconfig @var{file}
@findex -readconfig
@@ -2113,7 +2119,7 @@ Read device configuration from @var{file}.
ETEXI
DEF("writeconfig", HAS_ARG, QEMU_OPTION_writeconfig,
"-writeconfig <file>\n"
- " read/write config file\n")
+ " read/write config file\n", QEMU_ARCH_ALL)
STEXI
@item -writeconfig @var{file}
@findex -writeconfig
@@ -2121,7 +2127,8 @@ Write device configuration to @var{file}.
ETEXI
DEF("nodefconfig", 0, QEMU_OPTION_nodefconfig,
"-nodefconfig\n"
- " do not load default config files at startup\n")
+ " do not load default config files at startup\n",
+ QEMU_ARCH_ALL)
STEXI
@item -nodefconfig
@findex -nodefconfig
diff --git a/sysemu.h b/sysemu.h
index 5464d353e8..d0effa031c 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -142,13 +142,9 @@ extern uint64_t node_cpumask[MAX_NODES];
extern const char *option_rom[MAX_OPTION_ROMS];
extern int nb_option_roms;
-#ifdef NEED_CPU_H
-#if defined(TARGET_SPARC) || defined(TARGET_PPC)
#define MAX_PROM_ENVS 128
extern const char *prom_envs[MAX_PROM_ENVS];
extern unsigned int nb_prom_envs;
-#endif
-#endif
typedef enum {
IF_NONE,
diff --git a/vl.c b/vl.c
index 15ab44c624..7c0a825a5f 100644
--- a/vl.c
+++ b/vl.c
@@ -120,7 +120,6 @@ int main(int argc, char **argv)
#include "hw/usb.h"
#include "hw/pcmcia.h"
#include "hw/pc.h"
-#include "hw/audiodev.h"
#include "hw/isa.h"
#include "hw/baum.h"
#include "hw/bt.h"
@@ -153,14 +152,13 @@ int main(int argc, char **argv)
#include "disas.h"
-#include "exec-all.h"
-
#include "qemu_socket.h"
#include "slirp/libslirp.h"
#include "qemu-queue.h"
#include "cpus.h"
+#include "arch_init.h"
//#define DEBUG_NET
//#define DEBUG_SLIRP
@@ -191,15 +189,6 @@ static int rtc_utc = 1;
static int rtc_date_offset = -1; /* -1 means no change */
QEMUClock *rtc_clock;
int vga_interface_type = VGA_NONE;
-#ifdef TARGET_SPARC
-int graphic_width = 1024;
-int graphic_height = 768;
-int graphic_depth = 8;
-#else
-int graphic_width = 800;
-int graphic_height = 600;
-int graphic_depth = 15;
-#endif
static int full_screen = 0;
#ifdef CONFIG_SDL
static int no_frame = 0;
@@ -209,9 +198,7 @@ CharDriverState *serial_hds[MAX_SERIAL_PORTS];
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
int win2k_install_hack = 0;
-#ifdef TARGET_I386
int rtc_td_hack = 0;
-#endif
int usb_enabled = 0;
int singlestep = 0;
int smp_cpus = 1;
@@ -234,16 +221,12 @@ const char *watchdog;
const char *option_rom[MAX_OPTION_ROMS];
int nb_option_roms;
int semihosting_enabled = 0;
-#ifdef TARGET_ARM
int old_param = 0;
-#endif
const char *qemu_name;
int alt_grab = 0;
int ctrl_grab = 0;
-#if defined(TARGET_SPARC) || defined(TARGET_PPC)
unsigned int nb_prom_envs = 0;
const char *prom_envs[MAX_PROM_ENVS];
-#endif
int boot_menu;
int nb_numa_nodes;
@@ -497,7 +480,6 @@ static void configure_rtc(QemuOpts *opts)
exit(1);
}
}
-#ifdef TARGET_I386
value = qemu_opt_get(opts, "driftfix");
if (value) {
if (!strcmp(value, "slew")) {
@@ -509,7 +491,6 @@ static void configure_rtc(QemuOpts *opts)
exit(1);
}
}
-#endif
}
#ifdef _WIN32
@@ -1669,206 +1650,6 @@ void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque)
#endif
/***********************************************************/
-/* ram save/restore */
-
-#define RAM_SAVE_FLAG_FULL 0x01 /* Obsolete, not used anymore */
-#define RAM_SAVE_FLAG_COMPRESS 0x02
-#define RAM_SAVE_FLAG_MEM_SIZE 0x04
-#define RAM_SAVE_FLAG_PAGE 0x08
-#define RAM_SAVE_FLAG_EOS 0x10
-
-static int is_dup_page(uint8_t *page, uint8_t ch)
-{
- uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
- uint32_t *array = (uint32_t *)page;
- int i;
-
- for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
- if (array[i] != val)
- return 0;
- }
-
- return 1;
-}
-
-static int ram_save_block(QEMUFile *f)
-{
- static ram_addr_t current_addr = 0;
- ram_addr_t saved_addr = current_addr;
- ram_addr_t addr = 0;
- int found = 0;
-
- while (addr < last_ram_offset) {
- if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
- uint8_t *p;
-
- cpu_physical_memory_reset_dirty(current_addr,
- current_addr + TARGET_PAGE_SIZE,
- MIGRATION_DIRTY_FLAG);
-
- p = qemu_get_ram_ptr(current_addr);
-
- if (is_dup_page(p, *p)) {
- qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
- qemu_put_byte(f, *p);
- } else {
- qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
- qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
- }
-
- found = 1;
- break;
- }
- addr += TARGET_PAGE_SIZE;
- current_addr = (saved_addr + addr) % last_ram_offset;
- }
-
- return found;
-}
-
-static uint64_t bytes_transferred;
-
-static ram_addr_t ram_save_remaining(void)
-{
- ram_addr_t addr;
- ram_addr_t count = 0;
-
- for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
- if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
- count++;
- }
-
- return count;
-}
-
-uint64_t ram_bytes_remaining(void)
-{
- return ram_save_remaining() * TARGET_PAGE_SIZE;
-}
-
-uint64_t ram_bytes_transferred(void)
-{
- return bytes_transferred;
-}
-
-uint64_t ram_bytes_total(void)
-{
- return last_ram_offset;
-}
-
-static int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque)
-{
- ram_addr_t addr;
- uint64_t bytes_transferred_last;
- double bwidth = 0;
- uint64_t expected_time = 0;
-
- if (stage < 0) {
- cpu_physical_memory_set_dirty_tracking(0);
- return 0;
- }
-
- if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
- qemu_file_set_error(f);
- return 0;
- }
-
- if (stage == 1) {
- bytes_transferred = 0;
-
- /* Make sure all dirty bits are set */
- for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
- if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
- cpu_physical_memory_set_dirty(addr);
- }
-
- /* Enable dirty memory tracking */
- cpu_physical_memory_set_dirty_tracking(1);
-
- qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
- }
-
- bytes_transferred_last = bytes_transferred;
- bwidth = qemu_get_clock_ns(rt_clock);
-
- while (!qemu_file_rate_limit(f)) {
- int ret;
-
- ret = ram_save_block(f);
- bytes_transferred += ret * TARGET_PAGE_SIZE;
- if (ret == 0) /* no more blocks */
- break;
- }
-
- bwidth = qemu_get_clock_ns(rt_clock) - bwidth;
- bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
-
- /* if we haven't transferred anything this round, force expected_time to a
- * a very high value, but without crashing */
- if (bwidth == 0)
- bwidth = 0.000001;
-
- /* try transferring iterative blocks of memory */
- if (stage == 3) {
- /* flush all remaining blocks regardless of rate limiting */
- while (ram_save_block(f) != 0) {
- bytes_transferred += TARGET_PAGE_SIZE;
- }
- cpu_physical_memory_set_dirty_tracking(0);
- }
-
- qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
-
- expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
-
- return (stage == 2) && (expected_time <= migrate_max_downtime());
-}
-
-static int ram_load(QEMUFile *f, void *opaque, int version_id)
-{
- ram_addr_t addr;
- int flags;
-
- if (version_id != 3)
- return -EINVAL;
-
- do {
- addr = qemu_get_be64(f);
-
- flags = addr & ~TARGET_PAGE_MASK;
- addr &= TARGET_PAGE_MASK;
-
- if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
- if (addr != last_ram_offset)
- return -EINVAL;
- }
-
- if (flags & RAM_SAVE_FLAG_COMPRESS) {
- uint8_t ch = qemu_get_byte(f);
- memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
-#ifndef _WIN32
- if (ch == 0 &&
- (!kvm_enabled() || kvm_has_sync_mmu())) {
- madvise(qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE, MADV_DONTNEED);
- }
-#endif
- } else if (flags & RAM_SAVE_FLAG_PAGE) {
- qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
- }
- if (qemu_file_has_error(f)) {
- return -EIO;
- }
- } while (!(flags & RAM_SAVE_FLAG_EOS));
-
- return 0;
-}
-
-void qemu_service_io(void)
-{
- qemu_notify_event();
-}
-
-/***********************************************************/
/* machine registration */
static QEMUMachine *first_machine = NULL;
@@ -2295,8 +2076,8 @@ static void version(void)
static void help(int exitcode)
{
const char *options_help =
-#define DEF(option, opt_arg, opt_enum, opt_help) \
- opt_help
+#define DEF(option, opt_arg, opt_enum, opt_help, arch_mask) \
+ opt_help
#define DEFHEADING(text) stringify(text) "\n"
#include "qemu-options.h"
#undef DEF
@@ -2323,7 +2104,7 @@ static void help(int exitcode)
#define HAS_ARG 0x0001
enum {
-#define DEF(option, opt_arg, opt_enum, opt_help) \
+#define DEF(option, opt_arg, opt_enum, opt_help, arch_mask) \
opt_enum,
#define DEFHEADING(text)
#include "qemu-options.h"
@@ -2336,12 +2117,13 @@ typedef struct QEMUOption {
const char *name;
int flags;
int index;
+ uint32_t arch_mask;
} QEMUOption;
static const QEMUOption qemu_options[] = {
- { "h", 0, QEMU_OPTION_h },
-#define DEF(option, opt_arg, opt_enum, opt_help) \
- { option, opt_arg, opt_enum },
+ { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL },
+#define DEF(option, opt_arg, opt_enum, opt_help, arch_mask) \
+ { option, opt_arg, opt_enum, arch_mask },
#define DEFHEADING(text)
#include "qemu-options.h"
#undef DEF
@@ -2349,148 +2131,6 @@ static const QEMUOption qemu_options[] = {
#undef GEN_DOCS
{ NULL },
};
-
-#ifdef HAS_AUDIO
-struct soundhw soundhw[] = {
-#ifdef HAS_AUDIO_CHOICE
-#if defined(TARGET_I386) || defined(TARGET_MIPS)
- {
- "pcspk",
- "PC speaker",
- 0,
- 1,
- { .init_isa = pcspk_audio_init }
- },
-#endif
-
-#ifdef CONFIG_SB16
- {
- "sb16",
- "Creative Sound Blaster 16",
- 0,
- 1,
- { .init_isa = SB16_init }
- },
-#endif
-
-#ifdef CONFIG_CS4231A
- {
- "cs4231a",
- "CS4231A",
- 0,
- 1,
- { .init_isa = cs4231a_init }
- },
-#endif
-
-#ifdef CONFIG_ADLIB
- {
- "adlib",
-#ifdef HAS_YMF262
- "Yamaha YMF262 (OPL3)",
-#else
- "Yamaha YM3812 (OPL2)",
-#endif
- 0,
- 1,
- { .init_isa = Adlib_init }
- },
-#endif
-
-#ifdef CONFIG_GUS
- {
- "gus",
- "Gravis Ultrasound GF1",
- 0,
- 1,
- { .init_isa = GUS_init }
- },
-#endif
-
-#ifdef CONFIG_AC97
- {
- "ac97",
- "Intel 82801AA AC97 Audio",
- 0,
- 0,
- { .init_pci = ac97_init }
- },
-#endif
-
-#ifdef CONFIG_ES1370
- {
- "es1370",
- "ENSONIQ AudioPCI ES1370",
- 0,
- 0,
- { .init_pci = es1370_init }
- },
-#endif
-
-#endif /* HAS_AUDIO_CHOICE */
-
- { NULL, NULL, 0, 0, { NULL } }
-};
-
-static void select_soundhw (const char *optarg)
-{
- struct soundhw *c;
-
- if (*optarg == '?') {
- show_valid_cards:
-
- printf ("Valid sound card names (comma separated):\n");
- for (c = soundhw; c->name; ++c) {
- printf ("%-11s %s\n", c->name, c->descr);
- }
- printf ("\n-soundhw all will enable all of the above\n");
- exit (*optarg != '?');
- }
- else {
- size_t l;
- const char *p;
- char *e;
- int bad_card = 0;
-
- if (!strcmp (optarg, "all")) {
- for (c = soundhw; c->name; ++c) {
- c->enabled = 1;
- }
- return;
- }
-
- p = optarg;
- while (*p) {
- e = strchr (p, ',');
- l = !e ? strlen (p) : (size_t) (e - p);
-
- for (c = soundhw; c->name; ++c) {
- if (!strncmp (c->name, p, l) && !c->name[l]) {
- c->enabled = 1;
- break;
- }
- }
-
- if (!c->name) {
- if (l > 80) {
- fprintf (stderr,
- "Unknown sound card name (too big to show)\n");
- }
- else {
- fprintf (stderr, "Unknown sound card name `%.*s'\n",
- (int) l, p);
- }
- bad_card = 1;
- }
- p += l + (e != NULL);
- }
-
- if (bad_card)
- goto show_valid_cards;
- }
-}
-#endif
-
static void select_vgahw (const char *p)
{
const char *opts;
@@ -2525,7 +2165,6 @@ static void select_vgahw (const char *p)
}
}
-#ifdef TARGET_I386
static int balloon_parse(const char *arg)
{
QemuOpts *opts;
@@ -2550,7 +2189,6 @@ static int balloon_parse(const char *arg)
return -1;
}
-#endif
#ifdef _WIN32
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
@@ -2560,54 +2198,6 @@ static BOOL WINAPI qemu_ctrl_handler(DWORD type)
}
#endif
-int qemu_uuid_parse(const char *str, uint8_t *uuid)
-{
- int ret;
-
- if(strlen(str) != 36)
- return -1;
-
- ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
- &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
- &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]);
-
- if(ret != 16)
- return -1;
-
-#ifdef TARGET_I386
- smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
-#endif
-
- return 0;
-}
-
-#ifdef TARGET_I386
-static void do_acpitable_option(const char *optarg)
-{
- if (acpi_table_add(optarg) < 0) {
- fprintf(stderr, "Wrong acpi table provided\n");
- exit(1);
- }
-}
-#endif
-
-#ifdef TARGET_I386
-static void do_smbios_option(const char *optarg)
-{
- if (smbios_entry_add(optarg) < 0) {
- fprintf(stderr, "Wrong smbios provided\n");
- exit(1);
- }
-}
-#endif
-
-static void cpudef_init(void)
-{
-#if defined(cpudef_setup)
- cpudef_setup(); /* parse cpu definitions in target config file */
-#endif
-}
-
#ifndef _WIN32
static void termsig_handler(int signal)
@@ -3147,7 +2737,7 @@ int main(int argc, char **argv, char **envp)
fclose(fp);
}
- fname = CONFIG_QEMU_CONFDIR "/target-" TARGET_ARCH ".conf";
+ fname = arch_config_name;
fp = fopen(fname, "r");
if (fp) {
if (qemu_config_parse(fp, fname) != 0) {
@@ -3169,6 +2759,10 @@ int main(int argc, char **argv, char **envp)
const QEMUOption *popt;
popt = lookup_opt(argc, argv, &optarg, &optind);
+ if (!(popt->arch_mask & arch_type)) {
+ printf("Option %s not supported for this target\n", popt->name);
+ exit(1);
+ }
switch(popt->index) {
case QEMU_OPTION_M:
machine = find_machine(optarg);
@@ -3372,11 +2966,9 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_fdb:
drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
break;
-#ifdef TARGET_I386
case QEMU_OPTION_no_fd_bootchk:
fd_bootchk = 0;
break;
-#endif
case QEMU_OPTION_netdev:
if (net_client_parse(&qemu_netdev_opts, optarg) == -1) {
exit(1);
@@ -3408,15 +3000,21 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_bt:
add_device_config(DEV_BT, optarg);
break;
-#ifdef HAS_AUDIO
case QEMU_OPTION_audio_help:
+ if (!(audio_available())) {
+ printf("Option %s not supported for this target\n", popt->name);
+ exit(1);
+ }
AUD_help ();
exit (0);
break;
case QEMU_OPTION_soundhw:
+ if (!(audio_available())) {
+ printf("Option %s not supported for this target\n", popt->name);
+ exit(1);
+ }
select_soundhw (optarg);
break;
-#endif
case QEMU_OPTION_h:
help(0);
break;
@@ -3491,7 +3089,6 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_vga:
select_vgahw (optarg);
break;
-#if defined(TARGET_PPC) || defined(TARGET_SPARC)
case QEMU_OPTION_g:
{
const char *p;
@@ -3526,7 +3123,6 @@ int main(int argc, char **argv, char **envp)
graphic_depth = depth;
}
break;
-#endif
case QEMU_OPTION_echr:
{
char *r;
@@ -3622,7 +3218,6 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_pidfile:
pid_file = optarg;
break;
-#ifdef TARGET_I386
case QEMU_OPTION_win2k_hack:
win2k_install_hack = 1;
break;
@@ -3635,12 +3230,13 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_smbios:
do_smbios_option(optarg);
break;
-#endif
-#ifdef CONFIG_KVM
case QEMU_OPTION_enable_kvm:
+ if (!(kvm_available())) {
+ printf("Option %s not supported for this target\n", popt->name);
+ exit(1);
+ }
kvm_allowed = 1;
break;
-#endif
case QEMU_OPTION_usb:
usb_enabled = 1;
break;
@@ -3673,7 +3269,6 @@ int main(int argc, char **argv, char **envp)
display_type = DT_VNC;
vnc_display = optarg;
break;
-#ifdef TARGET_I386
case QEMU_OPTION_no_acpi:
acpi_enabled = 0;
break;
@@ -3686,7 +3281,6 @@ int main(int argc, char **argv, char **envp)
exit(1);
}
break;
-#endif
case QEMU_OPTION_no_reboot:
no_reboot = 1;
break;
@@ -3716,11 +3310,9 @@ int main(int argc, char **argv, char **envp)
option_rom[nb_option_roms] = optarg;
nb_option_roms++;
break;
-#if defined(TARGET_ARM) || defined(TARGET_M68K)
case QEMU_OPTION_semihosting:
semihosting_enabled = 1;
break;
-#endif
case QEMU_OPTION_name:
qemu_name = qemu_strdup(optarg);
{
@@ -3736,7 +3328,6 @@ int main(int argc, char **argv, char **envp)
}
}
break;
-#if defined(TARGET_SPARC) || defined(TARGET_PPC)
case QEMU_OPTION_prom_env:
if (nb_prom_envs >= MAX_PROM_ENVS) {
fprintf(stderr, "Too many prom variables\n");
@@ -3745,12 +3336,9 @@ int main(int argc, char **argv, char **envp)
prom_envs[nb_prom_envs] = optarg;
nb_prom_envs++;
break;
-#endif
-#ifdef TARGET_ARM
case QEMU_OPTION_old_param:
old_param = 1;
break;
-#endif
case QEMU_OPTION_clock:
configure_alarms(optarg);
break;
@@ -3795,17 +3383,27 @@ int main(int argc, char **argv, char **envp)
run_as = optarg;
break;
#endif
-#ifdef CONFIG_XEN
case QEMU_OPTION_xen_domid:
+ if (!(xen_available())) {
+ printf("Option %s not supported for this target\n", popt->name);
+ exit(1);
+ }
xen_domid = atoi(optarg);
break;
case QEMU_OPTION_xen_create:
+ if (!(xen_available())) {
+ printf("Option %s not supported for this target\n", popt->name);
+ exit(1);
+ }
xen_mode = XEN_CREATE;
break;
case QEMU_OPTION_xen_attach:
+ if (!(xen_available())) {
+ printf("Option %s not supported for this target\n", popt->name);
+ exit(1);
+ }
xen_mode = XEN_ATTACH;
break;
-#endif
case QEMU_OPTION_readconfig:
{
FILE *fp;