Merge remote-tracking branch 'bonzini/stub' into staging
* bonzini/stub: (27 commits) build: improve quiet output for .stp rules build: fold trace-obj-y into libqemuutil.a build: some simplifications for "trace/Makefile.objs" build: remove coroutine-obj-y build: move version-obj-y to the generic LINK rule build: move base QAPI files to libqemuutil.a build: move QAPI definitions for QEMU out of qapi-obj-y build: consolidate multiple variables into universal-obj-y build: move qobject files to qobject/ and libqemuutil.a build: move libqemuutil.a components to util/ build: move files away from tools-obj-y, common-obj-y, user-obj-y build: move util-obj-y to libqemuutil.a build: rename oslib-obj-y to util-obj-y libcacard: list oslib-obj-y file explicitly libcacard: link vscclient to dynamic library libcacard: rewrite Makefile in non-recursive style libcacard: add list of exported symbols libcacard: use per-target variable definitions libcacard: prepare to use -y trick in the Makefile libcacard: require libtool to build it ... Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
commit
7adef3bc5a
56
Makefile
56
Makefile
@ -104,6 +104,14 @@ defconfig:
|
||||
-include config-all-devices.mak
|
||||
-include config-all-disas.mak
|
||||
|
||||
ifneq ($(wildcard config-host.mak),)
|
||||
include $(SRC_PATH)/Makefile.objs
|
||||
include $(SRC_PATH)/tests/Makefile
|
||||
endif
|
||||
ifeq ($(CONFIG_SMARTCARD_NSS),y)
|
||||
include $(SRC_PATH)/libcacard/Makefile
|
||||
endif
|
||||
|
||||
all: $(DOCS) $(TOOLS) $(HELPERS-y) recurse-all
|
||||
|
||||
config-host.h: config-host.h-timestamp
|
||||
@ -116,12 +124,6 @@ SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
|
||||
subdir-%:
|
||||
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,)
|
||||
|
||||
ifneq ($(wildcard config-host.mak),)
|
||||
include $(SRC_PATH)/Makefile.objs
|
||||
endif
|
||||
|
||||
subdir-libcacard: $(oslib-obj-y) $(trace-obj-y) qemu-timer-common.o
|
||||
|
||||
subdir-pixman: pixman/Makefile
|
||||
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,)
|
||||
|
||||
@ -131,11 +133,11 @@ pixman/Makefile: $(SRC_PATH)/pixman/configure
|
||||
$(SRC_PATH)/pixman/configure:
|
||||
(cd $(SRC_PATH)/pixman; autoreconf -v --install)
|
||||
|
||||
$(SUBDIR_RULES): libqemustub.a
|
||||
$(SUBDIR_RULES): libqemuutil.a libqemustub.a
|
||||
|
||||
$(filter %-softmmu,$(SUBDIR_RULES)): $(universal-obj-y) $(trace-obj-y) $(common-obj-y) $(extra-obj-y)
|
||||
$(filter %-softmmu,$(SUBDIR_RULES)): $(universal-obj-y) $(common-obj-y) $(extra-obj-y)
|
||||
|
||||
$(filter %-user,$(SUBDIR_RULES)): $(universal-obj-y) $(trace-obj-y) $(user-obj-y)
|
||||
$(filter %-user,$(SUBDIR_RULES)): $(universal-obj-y) $(user-obj-y)
|
||||
|
||||
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
|
||||
romsubdir-%:
|
||||
@ -153,39 +155,22 @@ version.o: $(SRC_PATH)/version.rc config-host.h
|
||||
version-obj-$(CONFIG_WIN32) += version.o
|
||||
|
||||
######################################################################
|
||||
# Build library with stubs
|
||||
# Build libraries
|
||||
|
||||
libqemustub.a: $(stub-obj-y)
|
||||
|
||||
######################################################################
|
||||
# Support building shared library libcacard
|
||||
|
||||
.PHONY: libcacard.la install-libcacard
|
||||
libcacard.la: $(oslib-obj-y) qemu-timer-common.o $(trace-obj-y)
|
||||
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C libcacard V="$(V)" TARGET_DIR="$*/" libcacard.la,)
|
||||
|
||||
install-libcacard: libcacard.la
|
||||
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C libcacard V="$(V)" TARGET_DIR="$*/" install-libcacard,)
|
||||
libqemuutil.a: $(util-obj-y)
|
||||
|
||||
######################################################################
|
||||
|
||||
qemu-img.o: qemu-img-cmds.h
|
||||
|
||||
tools-obj-y = $(oslib-obj-y) $(trace-obj-y) qemu-tool.o qemu-timer.o \
|
||||
main-loop.o iohandler.o error.o
|
||||
tools-obj-$(CONFIG_POSIX) += compatfd.o
|
||||
|
||||
qemu-img$(EXESUF): qemu-img.o $(tools-obj-y) $(block-obj-y) libqemustub.a
|
||||
qemu-nbd$(EXESUF): qemu-nbd.o $(tools-obj-y) $(block-obj-y) libqemustub.a
|
||||
qemu-io$(EXESUF): qemu-io.o cmd.o $(tools-obj-y) $(block-obj-y) libqemustub.a
|
||||
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) libqemuutil.a libqemustub.a
|
||||
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) libqemuutil.a libqemustub.a
|
||||
qemu-io$(EXESUF): qemu-io.o cmd.o $(block-obj-y) libqemuutil.a libqemustub.a
|
||||
|
||||
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o
|
||||
|
||||
vscclient$(EXESUF): LIBS += $(libcacard_libs)
|
||||
vscclient$(EXESUF): $(libcacard-y) $(oslib-obj-y) $(trace-obj-y) libcacard/vscclient.o libqemustub.a
|
||||
$(call LINK, $^)
|
||||
|
||||
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/virtio-9p-marshal.o oslib-posix.o $(trace-obj-y)
|
||||
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/virtio-9p-marshal.o libqemuutil.a libqemustub.a
|
||||
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap
|
||||
|
||||
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx
|
||||
@ -196,10 +181,6 @@ qemu-ga$(EXESUF): QEMU_CFLAGS += -I qga/qapi-generated
|
||||
|
||||
gen-out-type = $(subst .,-,$(suffix $@))
|
||||
|
||||
ifneq ($(wildcard config-host.mak),)
|
||||
include $(SRC_PATH)/tests/Makefile
|
||||
endif
|
||||
|
||||
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py
|
||||
|
||||
qga/qapi-generated/qga-qapi-types.c qga/qapi-generated/qga-qapi-types.h :\
|
||||
@ -225,7 +206,7 @@ $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
|
||||
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
|
||||
$(qga-obj-y) qemu-ga.o: $(QGALIB_GEN)
|
||||
|
||||
qemu-ga$(EXESUF): $(qga-obj-y) $(oslib-obj-y) $(trace-obj-y) $(qapi-obj-y) $(qobject-obj-y) $(version-obj-y) libqemustub.a
|
||||
qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a
|
||||
$(call LINK, $^)
|
||||
|
||||
clean:
|
||||
@ -234,6 +215,7 @@ clean:
|
||||
rm -f qemu-options.def
|
||||
find . -name '*.[od]' -type f -exec rm -f {} +
|
||||
rm -f *.a *.lo $(TOOLS) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
|
||||
rm -f *.la
|
||||
rm -Rf .libs
|
||||
rm -f qemu-img-cmds.h
|
||||
@# May not be present in GENERATED_HEADERS
|
||||
|
138
Makefile.objs
138
Makefile.objs
@ -1,67 +1,31 @@
|
||||
#######################################################################
|
||||
# Stub library, linked in tools
|
||||
# Common libraries for tools and emulators
|
||||
stub-obj-y = stubs/
|
||||
|
||||
#######################################################################
|
||||
# Target-independent parts used in system and user emulation
|
||||
universal-obj-y =
|
||||
universal-obj-y += qemu-log.o
|
||||
|
||||
#######################################################################
|
||||
# QObject
|
||||
qobject-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o
|
||||
qobject-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o
|
||||
qobject-obj-y += qerror.o error.o qemu-error.o
|
||||
|
||||
universal-obj-y += $(qobject-obj-y)
|
||||
|
||||
#######################################################################
|
||||
# QOM
|
||||
qom-obj-y = qom/
|
||||
|
||||
universal-obj-y += $(qom-obj-y)
|
||||
|
||||
#######################################################################
|
||||
# Core hw code (qdev core)
|
||||
hw-core-obj-y += hw/
|
||||
hw-core-obj-y += qemu-option.o
|
||||
|
||||
universal-obj-y += $(hw-core-obj-y)
|
||||
|
||||
#######################################################################
|
||||
# oslib-obj-y is code depending on the OS (win32 vs posix)
|
||||
oslib-obj-y = osdep.o cutils.o qemu-timer-common.o
|
||||
oslib-obj-$(CONFIG_WIN32) += oslib-win32.o qemu-thread-win32.o
|
||||
oslib-obj-$(CONFIG_POSIX) += oslib-posix.o qemu-thread-posix.o
|
||||
|
||||
#######################################################################
|
||||
# coroutines
|
||||
coroutine-obj-y = qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
|
||||
coroutine-obj-y += qemu-coroutine-sleep.o
|
||||
|
||||
# If you change this logic, please also check tests/Makefile
|
||||
ifeq ($(CONFIG_UCONTEXT_COROUTINE),y)
|
||||
coroutine-obj-$(CONFIG_POSIX) += coroutine-ucontext.o
|
||||
else
|
||||
ifeq ($(CONFIG_SIGALTSTACK_COROUTINE),y)
|
||||
coroutine-obj-$(CONFIG_POSIX) += coroutine-sigaltstack.o
|
||||
else
|
||||
coroutine-obj-$(CONFIG_POSIX) += coroutine-gthread.o
|
||||
endif
|
||||
endif
|
||||
coroutine-obj-$(CONFIG_WIN32) += coroutine-win32.o
|
||||
util-obj-y = util/ qobject/ qapi/ trace/
|
||||
|
||||
#######################################################################
|
||||
# block-obj-y is code used by both qemu system emulation and qemu-img
|
||||
|
||||
block-obj-y = iov.o cache-utils.o qemu-option.o module.o async.o
|
||||
block-obj-y += nbd.o block.o blockjob.o aes.o qemu-config.o
|
||||
block-obj-y += thread-pool.o qemu-progress.o qemu-sockets.o uri.o notify.o
|
||||
block-obj-y += $(coroutine-obj-y) $(qobject-obj-y) $(version-obj-y)
|
||||
block-obj-$(CONFIG_POSIX) += event_notifier-posix.o aio-posix.o
|
||||
block-obj-$(CONFIG_WIN32) += event_notifier-win32.o aio-win32.o
|
||||
block-obj-y = async.o thread-pool.o
|
||||
block-obj-y += nbd.o block.o blockjob.o
|
||||
block-obj-y += main-loop.o iohandler.o qemu-timer.o
|
||||
block-obj-$(CONFIG_POSIX) += aio-posix.o
|
||||
block-obj-$(CONFIG_WIN32) += aio-win32.o
|
||||
block-obj-y += block/
|
||||
block-obj-y += $(qapi-obj-y) qapi-types.o qapi-visit.o
|
||||
block-obj-y += qapi-types.o qapi-visit.o
|
||||
|
||||
block-obj-y += qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
|
||||
block-obj-y += qemu-coroutine-sleep.o
|
||||
ifeq ($(CONFIG_UCONTEXT_COROUTINE),y)
|
||||
block-obj-$(CONFIG_POSIX) += coroutine-ucontext.o
|
||||
else
|
||||
ifeq ($(CONFIG_SIGALTSTACK_COROUTINE),y)
|
||||
block-obj-$(CONFIG_POSIX) += coroutine-sigaltstack.o
|
||||
else
|
||||
block-obj-$(CONFIG_POSIX) += coroutine-gthread.o
|
||||
endif
|
||||
endif
|
||||
block-obj-$(CONFIG_WIN32) += coroutine-win32.o
|
||||
|
||||
ifeq ($(CONFIG_VIRTIO)$(CONFIG_VIRTFS)$(CONFIG_PCI),yyy)
|
||||
# Lots of the fsdev/9pcode is pulled in by vl.c via qemu_fsdev_add.
|
||||
@ -76,25 +40,19 @@ endif
|
||||
|
||||
common-obj-y = $(block-obj-y) blockdev.o blockdev-nbd.o block/
|
||||
common-obj-y += net/
|
||||
common-obj-y += qom/
|
||||
common-obj-y += readline.o
|
||||
common-obj-y += $(oslib-obj-y)
|
||||
common-obj-$(CONFIG_WIN32) += os-win32.o
|
||||
common-obj-$(CONFIG_POSIX) += os-posix.o
|
||||
|
||||
common-obj-$(CONFIG_LINUX) += fsdev/
|
||||
extra-obj-$(CONFIG_LINUX) += fsdev/
|
||||
|
||||
common-obj-y += tcg-runtime.o host-utils.o main-loop.o
|
||||
common-obj-y += migration.o migration-tcp.o
|
||||
common-obj-y += migration.o migration-tcp.o
|
||||
common-obj-y += qemu-char.o #aio.o
|
||||
common-obj-y += block-migration.o iohandler.o
|
||||
common-obj-y += bitmap.o bitops.o
|
||||
common-obj-y += block-migration.o
|
||||
common-obj-y += page_cache.o
|
||||
|
||||
common-obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o
|
||||
common-obj-$(CONFIG_WIN32) += version.o
|
||||
|
||||
common-obj-$(CONFIG_SPICE) += spice-qemu-char.o
|
||||
|
||||
@ -106,9 +64,6 @@ common-obj-y += ui/
|
||||
common-obj-y += bt-host.o bt-vhci.o
|
||||
|
||||
common-obj-y += dma-helpers.o
|
||||
common-obj-y += acl.o
|
||||
common-obj-$(CONFIG_POSIX) += compatfd.o
|
||||
common-obj-y += qemu-timer.o qemu-timer-common.o
|
||||
common-obj-y += qtest.o
|
||||
common-obj-y += vl.o
|
||||
|
||||
@ -122,30 +77,6 @@ ifeq ($(CONFIG_SECCOMP),y)
|
||||
common-obj-y += qemu-seccomp.o
|
||||
endif
|
||||
|
||||
######################################################################
|
||||
# libuser
|
||||
|
||||
user-obj-y =
|
||||
user-obj-y += envlist.o path.o
|
||||
user-obj-y += tcg-runtime.o host-utils.o
|
||||
user-obj-y += cache-utils.o
|
||||
user-obj-y += module.o
|
||||
user-obj-y += qemu-user.o
|
||||
user-obj-y += qom/
|
||||
|
||||
######################################################################
|
||||
# disassemblers
|
||||
# NOTE: the disassembler code is only needed for debugging
|
||||
|
||||
universal-obj-y += disas/
|
||||
|
||||
######################################################################
|
||||
# trace
|
||||
|
||||
trace-obj-y += trace/
|
||||
|
||||
universal-obj-y += $(trace-obj-y)
|
||||
|
||||
######################################################################
|
||||
# smartcard
|
||||
|
||||
@ -160,19 +91,24 @@ common-obj-$(CONFIG_SMARTCARD_NSS) += $(libcacard-y)
|
||||
######################################################################
|
||||
# qapi
|
||||
|
||||
qapi-obj-y = qapi/
|
||||
qapi-obj-y += qapi-types.o qapi-visit.o
|
||||
|
||||
common-obj-y += qmp-marshal.o qapi-visit.o qapi-types.o
|
||||
common-obj-y += qmp.o hmp.o
|
||||
|
||||
universal-obj-y += $(qapi-obj-y)
|
||||
#######################################################################
|
||||
# Target-independent parts used in system and user emulation
|
||||
universal-obj-y =
|
||||
universal-obj-y += qemu-log.o
|
||||
universal-obj-y += tcg-runtime.o
|
||||
universal-obj-y += hw/
|
||||
universal-obj-y += qom/
|
||||
universal-obj-y += disas/
|
||||
|
||||
######################################################################
|
||||
# guest agent
|
||||
|
||||
qga-obj-y = qga/ module.o qemu-tool.o
|
||||
qga-obj-$(CONFIG_POSIX) += qemu-sockets.o qemu-option.o
|
||||
# FIXME: a few definitions from qapi-types.o/qapi-visit.o are needed
|
||||
# by libqemuutil.a. These should be moved to a separate .json schema.
|
||||
qga-obj-y = qga/ qapi-types.o qapi-visit.o
|
||||
|
||||
vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS)
|
||||
|
||||
@ -182,14 +118,10 @@ QEMU_CFLAGS+=$(GLIB_CFLAGS)
|
||||
|
||||
nested-vars += \
|
||||
stub-obj-y \
|
||||
util-obj-y \
|
||||
qga-obj-y \
|
||||
qom-obj-y \
|
||||
qapi-obj-y \
|
||||
block-obj-y \
|
||||
user-obj-y \
|
||||
common-obj-y \
|
||||
universal-obj-y \
|
||||
hw-core-obj-y \
|
||||
extra-obj-y \
|
||||
trace-obj-y
|
||||
extra-obj-y
|
||||
dummy := $(call unnest-vars)
|
||||
|
@ -54,7 +54,7 @@ $(QEMU_PROG).stp: $(SRC_PATH)/trace-events
|
||||
--binary=$(bindir)/$(QEMU_PROG) \
|
||||
--target-arch=$(TARGET_ARCH) \
|
||||
--target-type=$(TARGET_TYPE) \
|
||||
< $< > $@," GEN $(QEMU_PROG).stp")
|
||||
< $< > $@," GEN $(TARGET_DIR)$(QEMU_PROG).stp")
|
||||
else
|
||||
stap:
|
||||
endif
|
||||
@ -83,7 +83,7 @@ ifdef CONFIG_LINUX_USER
|
||||
QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) -I$(SRC_PATH)/linux-user
|
||||
|
||||
obj-y += linux-user/
|
||||
obj-y += gdbstub.o thunk.o user-exec.o $(oslib-obj-y)
|
||||
obj-y += gdbstub.o thunk.o user-exec.o
|
||||
|
||||
endif #CONFIG_LINUX_USER
|
||||
|
||||
@ -95,7 +95,7 @@ ifdef CONFIG_BSD_USER
|
||||
QEMU_CFLAGS+=-I$(SRC_PATH)/bsd-user -I$(SRC_PATH)/bsd-user/$(TARGET_ARCH)
|
||||
|
||||
obj-y += bsd-user/
|
||||
obj-y += gdbstub.o user-exec.o $(oslib-obj-y)
|
||||
obj-y += gdbstub.o user-exec.o
|
||||
|
||||
endif #CONFIG_BSD_USER
|
||||
|
||||
@ -146,21 +146,16 @@ include $(SRC_PATH)/Makefile.objs
|
||||
|
||||
all-obj-y = $(obj-y)
|
||||
all-obj-y += $(addprefix ../, $(universal-obj-y))
|
||||
|
||||
ifdef CONFIG_SOFTMMU
|
||||
all-obj-y += $(addprefix ../, $(common-obj-y))
|
||||
else
|
||||
all-obj-y += $(addprefix ../, $(user-obj-y))
|
||||
endif #CONFIG_LINUX_USER
|
||||
all-obj-$(CONFIG_SOFTMMU) += $(addprefix ../, $(common-obj-y))
|
||||
|
||||
ifdef QEMU_PROGW
|
||||
# The linker builds a windows executable. Make also a console executable.
|
||||
$(QEMU_PROGW): $(all-obj-y) ../libqemustub.a
|
||||
$(QEMU_PROGW): $(all-obj-y) ../libqemuutil.a ../libqemustub.a
|
||||
$(call LINK,$^)
|
||||
$(QEMU_PROG): $(QEMU_PROGW)
|
||||
$(call quiet-command,$(OBJCOPY) --subsystem console $(QEMU_PROGW) $(QEMU_PROG)," GEN $(TARGET_DIR)$(QEMU_PROG)")
|
||||
else
|
||||
$(QEMU_PROG): $(all-obj-y) ../libqemustub.a
|
||||
$(QEMU_PROG): $(all-obj-y) ../libqemuutil.a ../libqemustub.a
|
||||
$(call LINK,$^)
|
||||
endif
|
||||
|
||||
|
@ -980,9 +980,36 @@ static BlockDriver bdrv_iscsi = {
|
||||
#endif
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_iscsi_opts = {
|
||||
.name = "iscsi",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "user",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "username for CHAP authentication to target",
|
||||
},{
|
||||
.name = "password",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "password for CHAP authentication to target",
|
||||
},{
|
||||
.name = "header-digest",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "HeaderDigest setting. "
|
||||
"{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
|
||||
},{
|
||||
.name = "initiator-name",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Initiator iqn name to use when connecting",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static void iscsi_block_init(void)
|
||||
{
|
||||
bdrv_register(&bdrv_iscsi);
|
||||
qemu_add_opts(&qemu_iscsi_opts);
|
||||
}
|
||||
|
||||
block_init(iscsi_block_init);
|
||||
|
118
blockdev.c
118
blockdev.c
@ -1427,3 +1427,121 @@ BlockJobInfoList *qmp_query_block_jobs(Error **errp)
|
||||
bdrv_iterate(do_qmp_query_block_jobs_one, &prev);
|
||||
return dummy.next;
|
||||
}
|
||||
|
||||
QemuOptsList qemu_drive_opts = {
|
||||
.name = "drive",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "bus",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "bus number",
|
||||
},{
|
||||
.name = "unit",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "unit number (i.e. lun for scsi)",
|
||||
},{
|
||||
.name = "if",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
|
||||
},{
|
||||
.name = "index",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "index number",
|
||||
},{
|
||||
.name = "cyls",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "number of cylinders (ide disk geometry)",
|
||||
},{
|
||||
.name = "heads",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "number of heads (ide disk geometry)",
|
||||
},{
|
||||
.name = "secs",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "number of sectors (ide disk geometry)",
|
||||
},{
|
||||
.name = "trans",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "chs translation (auto, lba. none)",
|
||||
},{
|
||||
.name = "media",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "media type (disk, cdrom)",
|
||||
},{
|
||||
.name = "snapshot",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "enable/disable snapshot mode",
|
||||
},{
|
||||
.name = "file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "disk image",
|
||||
},{
|
||||
.name = "cache",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "host cache usage (none, writeback, writethrough, "
|
||||
"directsync, unsafe)",
|
||||
},{
|
||||
.name = "aio",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "host AIO implementation (threads, native)",
|
||||
},{
|
||||
.name = "format",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "disk format (raw, qcow2, ...)",
|
||||
},{
|
||||
.name = "serial",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "disk serial number",
|
||||
},{
|
||||
.name = "rerror",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "read error action",
|
||||
},{
|
||||
.name = "werror",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "write error action",
|
||||
},{
|
||||
.name = "addr",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "pci address (virtio only)",
|
||||
},{
|
||||
.name = "readonly",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "open drive file as read-only",
|
||||
},{
|
||||
.name = "iops",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit total I/O operations per second",
|
||||
},{
|
||||
.name = "iops_rd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit read operations per second",
|
||||
},{
|
||||
.name = "iops_wr",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit write operations per second",
|
||||
},{
|
||||
.name = "bps",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit total bytes per second",
|
||||
},{
|
||||
.name = "bps_rd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit read bytes per second",
|
||||
},{
|
||||
.name = "bps_wr",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit write bytes per second",
|
||||
},{
|
||||
.name = "copy-on-read",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "copy read data from backing file into image file",
|
||||
},{
|
||||
.name = "boot",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "(deprecated, ignored)",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
87
configure
vendored
87
configure
vendored
@ -214,7 +214,6 @@ trace_backend="nop"
|
||||
trace_file="trace"
|
||||
spice=""
|
||||
rbd=""
|
||||
smartcard=""
|
||||
smartcard_nss=""
|
||||
usb_redir=""
|
||||
opengl=""
|
||||
@ -861,10 +860,6 @@ for opt do
|
||||
;;
|
||||
--enable-xfsctl) xfs="yes"
|
||||
;;
|
||||
--disable-smartcard) smartcard="no"
|
||||
;;
|
||||
--enable-smartcard) smartcard="yes"
|
||||
;;
|
||||
--disable-smartcard-nss) smartcard_nss="no"
|
||||
;;
|
||||
--enable-smartcard-nss) smartcard_nss="yes"
|
||||
@ -1128,8 +1123,6 @@ echo " --enable-spice enable spice"
|
||||
echo " --enable-rbd enable building the rados block device (rbd)"
|
||||
echo " --disable-libiscsi disable iscsi support"
|
||||
echo " --enable-libiscsi enable iscsi support"
|
||||
echo " --disable-smartcard disable smartcard support"
|
||||
echo " --enable-smartcard enable smartcard support"
|
||||
echo " --disable-smartcard-nss disable smartcard nss support"
|
||||
echo " --enable-smartcard-nss enable smartcard nss support"
|
||||
echo " --disable-usb-redir disable usb network redirection support"
|
||||
@ -2813,42 +2806,37 @@ EOF
|
||||
fi
|
||||
|
||||
# check for libcacard for smartcard support
|
||||
if test "$smartcard" != "no" ; then
|
||||
smartcard="yes"
|
||||
smartcard_cflags=""
|
||||
# TODO - what's the minimal nss version we support?
|
||||
if test "$smartcard_nss" != "no"; then
|
||||
cat > $TMPC << EOF
|
||||
smartcard_cflags=""
|
||||
# TODO - what's the minimal nss version we support?
|
||||
if test "$smartcard_nss" != "no"; then
|
||||
cat > $TMPC << EOF
|
||||
#include <pk11pub.h>
|
||||
int main(void) { PK11_FreeSlot(0); return 0; }
|
||||
EOF
|
||||
smartcard_includes="-I\$(SRC_PATH)/libcacard"
|
||||
libcacard_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
|
||||
libcacard_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
|
||||
test_cflags="$libcacard_cflags"
|
||||
# The header files in nss < 3.13.3 have a bug which causes them to
|
||||
# emit a warning. If we're going to compile QEMU with -Werror, then
|
||||
# test that the headers don't have this bug. Otherwise we would pass
|
||||
# the configure test but fail to compile QEMU later.
|
||||
if test "$werror" = "yes"; then
|
||||
test_cflags="-Werror $test_cflags"
|
||||
fi
|
||||
if $pkg_config --atleast-version=3.12.8 nss >/dev/null 2>&1 && \
|
||||
compile_prog "$test_cflags" "$libcacard_libs"; then
|
||||
smartcard_nss="yes"
|
||||
QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
|
||||
QEMU_INCLUDES="$QEMU_INCLUDES $smartcard_includes"
|
||||
libs_softmmu="$libcacard_libs $libs_softmmu"
|
||||
else
|
||||
if test "$smartcard_nss" = "yes"; then
|
||||
feature_not_found "nss"
|
||||
fi
|
||||
smartcard_nss="no"
|
||||
fi
|
||||
smartcard_includes="-I\$(SRC_PATH)/libcacard"
|
||||
libcacard_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
|
||||
libcacard_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
|
||||
test_cflags="$libcacard_cflags"
|
||||
# The header files in nss < 3.13.3 have a bug which causes them to
|
||||
# emit a warning. If we're going to compile QEMU with -Werror, then
|
||||
# test that the headers don't have this bug. Otherwise we would pass
|
||||
# the configure test but fail to compile QEMU later.
|
||||
if test "$werror" = "yes"; then
|
||||
test_cflags="-Werror $test_cflags"
|
||||
fi
|
||||
if test -n "$libtool" &&
|
||||
$pkg_config --atleast-version=3.12.8 nss >/dev/null 2>&1 && \
|
||||
compile_prog "$test_cflags" "$libcacard_libs"; then
|
||||
smartcard_nss="yes"
|
||||
QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
|
||||
QEMU_INCLUDES="$QEMU_INCLUDES $smartcard_includes"
|
||||
libs_softmmu="$libcacard_libs $libs_softmmu"
|
||||
else
|
||||
if test "$smartcard_nss" = "yes"; then
|
||||
feature_not_found "nss"
|
||||
fi
|
||||
smartcard_nss="no"
|
||||
fi
|
||||
fi
|
||||
if test "$smartcard" = "no" ; then
|
||||
smartcard_nss="no"
|
||||
fi
|
||||
|
||||
# check for usbredirparser for usb network redirection support
|
||||
@ -3203,9 +3191,6 @@ if test "$softmmu" = yes ; then
|
||||
tools="qemu-ga\$(EXESUF) $tools"
|
||||
fi
|
||||
fi
|
||||
if test "$smartcard_nss" = "yes" ; then
|
||||
tools="vscclient\$(EXESUF) $tools"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Mac OS X ships with a broken assembler
|
||||
@ -3594,10 +3579,6 @@ if test "$spice" = "yes" ; then
|
||||
echo "CONFIG_SPICE=y" >> $config_host_mak
|
||||
fi
|
||||
|
||||
if test "$smartcard" = "yes" ; then
|
||||
echo "CONFIG_SMARTCARD=y" >> $config_host_mak
|
||||
fi
|
||||
|
||||
if test "$smartcard_nss" = "yes" ; then
|
||||
echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
|
||||
echo "libcacard_libs=$libcacard_libs" >> $config_host_mak
|
||||
@ -3721,7 +3702,13 @@ echo "MAKE=$make" >> $config_host_mak
|
||||
echo "INSTALL=$install" >> $config_host_mak
|
||||
echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
|
||||
echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
|
||||
echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
|
||||
if test -n "$libtool"; then
|
||||
echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
|
||||
echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
|
||||
else
|
||||
echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
|
||||
echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
|
||||
fi
|
||||
echo "PYTHON=$python" >> $config_host_mak
|
||||
echo "CC=$cc" >> $config_host_mak
|
||||
echo "CC_I386=$cc_i386" >> $config_host_mak
|
||||
@ -4049,9 +4036,6 @@ fi
|
||||
if test "$target_softmmu" = "yes" ; then
|
||||
echo "CONFIG_SOFTMMU=y" >> $config_target_mak
|
||||
echo "LIBS+=$libs_softmmu $target_libs_softmmu" >> $config_target_mak
|
||||
if test "$smartcard_nss" = "yes" ; then
|
||||
echo "subdir-$target: subdir-libcacard" >> $config_host_mak
|
||||
fi
|
||||
case "$target_arch2" in
|
||||
i386|x86_64)
|
||||
echo "CONFIG_HAVE_CORE_DUMP=y" >> $config_target_mak
|
||||
@ -4252,10 +4236,9 @@ DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32"
|
||||
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas"
|
||||
DIRS="$DIRS roms/seabios roms/vgabios"
|
||||
DIRS="$DIRS qapi-generated"
|
||||
DIRS="$DIRS libcacard libcacard/libcacard libcacard/trace"
|
||||
FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
|
||||
FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
|
||||
FILES="$FILES tests/tcg/lm32/Makefile libcacard/Makefile"
|
||||
FILES="$FILES tests/tcg/lm32/Makefile"
|
||||
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
|
||||
FILES="$FILES pc-bios/spapr-rtas/Makefile"
|
||||
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
|
||||
|
2
exec.c
2
exec.c
@ -78,7 +78,7 @@ DEFINE_TLS(CPUArchState *,cpu_single_env);
|
||||
/* 0 = Do not count executed instructions.
|
||||
1 = Precise instruction counting.
|
||||
2 = Adaptive rate instruction counting. */
|
||||
int use_icount = 0;
|
||||
int use_icount;
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
|
||||
|
@ -7,3 +7,4 @@ extra-obj-y = qemu-fsdev-dummy.o
|
||||
else
|
||||
common-obj-y = qemu-fsdev-dummy.o
|
||||
endif
|
||||
common-obj-y += qemu-fsdev-opts.o
|
||||
|
@ -20,10 +20,3 @@ int qemu_fsdev_add(QemuOpts *opts)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void fsdev_register_config(void)
|
||||
{
|
||||
qemu_add_opts(&qemu_fsdev_opts);
|
||||
qemu_add_opts(&qemu_virtfs_opts);
|
||||
}
|
||||
machine_init(fsdev_register_config);
|
||||
|
85
fsdev/qemu-fsdev-opts.c
Normal file
85
fsdev/qemu-fsdev-opts.c
Normal file
@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Virtio 9p
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
* later. See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#include "qemu/config-file.h"
|
||||
#include "qemu/option.h"
|
||||
#include "qemu/module.h"
|
||||
|
||||
static QemuOptsList qemu_fsdev_opts = {
|
||||
.name = "fsdev",
|
||||
.implied_opt_name = "fsdriver",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_fsdev_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "fsdriver",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "path",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "security_model",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "writeout",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "readonly",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
|
||||
}, {
|
||||
.name = "socket",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "sock_fd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},
|
||||
|
||||
{ /*End of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_virtfs_opts = {
|
||||
.name = "virtfs",
|
||||
.implied_opt_name = "fsdriver",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_virtfs_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "fsdriver",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "path",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "mount_tag",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "security_model",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "writeout",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "readonly",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
}, {
|
||||
.name = "socket",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "sock_fd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},
|
||||
|
||||
{ /*End of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static void fsdev_register_config(void)
|
||||
{
|
||||
qemu_add_opts(&qemu_fsdev_opts);
|
||||
qemu_add_opts(&qemu_virtfs_opts);
|
||||
}
|
||||
machine_init(fsdev_register_config);
|
@ -97,11 +97,3 @@ FsDriverEntry *get_fsdev_fsentry(char *id)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void fsdev_register_config(void)
|
||||
{
|
||||
qemu_add_opts(&qemu_fsdev_opts);
|
||||
qemu_add_opts(&qemu_virtfs_opts);
|
||||
}
|
||||
machine_init(fsdev_register_config);
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
# core qdev-related obj files, also used by *-user:
|
||||
hw-core-obj-y += qdev.o qdev-properties.o
|
||||
universal-obj-y += qdev.o qdev-properties.o
|
||||
# irq.o needed for qdev GPIO handling:
|
||||
hw-core-obj-y += irq.o
|
||||
|
||||
universal-obj-y += irq.o
|
||||
|
||||
common-obj-y = usb/ ide/ pci/
|
||||
common-obj-y += loader.o
|
||||
@ -37,7 +36,7 @@ common-obj-$(CONFIG_DMA) += dma.o
|
||||
common-obj-$(CONFIG_I82374) += i82374.o
|
||||
common-obj-$(CONFIG_HPET) += hpet.o
|
||||
common-obj-$(CONFIG_APPLESMC) += applesmc.o
|
||||
common-obj-$(CONFIG_SMARTCARD) += ccid-card-passthru.o
|
||||
common-obj-y += ccid-card-passthru.o
|
||||
common-obj-$(CONFIG_SMARTCARD_NSS) += ccid-card-emulated.o
|
||||
common-obj-$(CONFIG_I8259) += i8259_common.o i8259.o
|
||||
common-obj-y += fifo.o
|
||||
|
@ -615,3 +615,54 @@ void qdev_machine_init(void)
|
||||
qdev_get_peripheral_anon();
|
||||
qdev_get_peripheral();
|
||||
}
|
||||
|
||||
QemuOptsList qemu_device_opts = {
|
||||
.name = "device",
|
||||
.implied_opt_name = "driver",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_device_opts.head),
|
||||
.desc = {
|
||||
/*
|
||||
* no elements => accept any
|
||||
* sanity checking will happen later
|
||||
* when setting device properties
|
||||
*/
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
QemuOptsList qemu_global_opts = {
|
||||
.name = "global",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_global_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "driver",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "property",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "value",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
int qemu_global_option(const char *str)
|
||||
{
|
||||
char driver[64], property[64];
|
||||
QemuOpts *opts;
|
||||
int rc, offset;
|
||||
|
||||
rc = sscanf(str, "%63[^.].%63[^=]%n", driver, property, &offset);
|
||||
if (rc < 2 || str[offset] != '=') {
|
||||
error_report("can't parse: \"%s\"", str);
|
||||
return -1;
|
||||
}
|
||||
|
||||
opts = qemu_opts_create_nofail(&qemu_global_opts);
|
||||
qemu_opt_set(opts, "driver", driver);
|
||||
qemu_opt_set(opts, "property", property);
|
||||
qemu_opt_set(opts, "value", str+offset+1);
|
||||
return 0;
|
||||
}
|
||||
|
@ -4,11 +4,11 @@ common-obj-$(CONFIG_USB_EHCI) += hcd-ehci.o hcd-ehci-pci.o hcd-ehci-sysbus.o
|
||||
common-obj-$(CONFIG_USB_XHCI) += hcd-xhci.o
|
||||
common-obj-y += libhw.o
|
||||
|
||||
common-obj-$(CONFIG_SMARTCARD) += dev-smartcard-reader.o
|
||||
common-obj-$(CONFIG_USB_REDIR) += redirect.o quirks.o
|
||||
|
||||
common-obj-y += core.o combined-packet.o bus.o desc.o dev-hub.o
|
||||
common-obj-y += host-$(HOST_USB).o dev-bluetooth.o
|
||||
common-obj-y += dev-hid.o dev-storage.o dev-wacom.o
|
||||
common-obj-y += dev-serial.o dev-network.o dev-audio.o
|
||||
common-obj-y += dev-smartcard-reader.o
|
||||
common-obj-y += dev-uas.o
|
||||
|
@ -6,11 +6,6 @@
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/option.h"
|
||||
|
||||
extern QemuOptsList qemu_fsdev_opts;
|
||||
extern QemuOptsList qemu_virtfs_opts;
|
||||
extern QemuOptsList qemu_spice_opts;
|
||||
extern QemuOptsList qemu_sandbox_opts;
|
||||
|
||||
QemuOptsList *qemu_find_opts(const char *group);
|
||||
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp);
|
||||
void qemu_add_opts(QemuOptsList *list);
|
||||
|
@ -183,4 +183,12 @@ char *get_boot_devices_list(uint32_t *size);
|
||||
|
||||
bool usb_enabled(bool default_usb);
|
||||
|
||||
extern QemuOptsList qemu_drive_opts;
|
||||
extern QemuOptsList qemu_chardev_opts;
|
||||
extern QemuOptsList qemu_device_opts;
|
||||
extern QemuOptsList qemu_netdev_opts;
|
||||
extern QemuOptsList qemu_net_opts;
|
||||
extern QemuOptsList qemu_global_opts;
|
||||
extern QemuOptsList qemu_mon_opts;
|
||||
|
||||
#endif
|
||||
|
@ -1,63 +1,49 @@
|
||||
-include ../config-host.mak
|
||||
-include $(SRC_PATH)/rules.mak
|
||||
-include $(SRC_PATH)/Makefile.objs
|
||||
|
||||
libcacard_includedir=$(includedir)/cacard
|
||||
|
||||
$(call set-vpath, $(SRC_PATH))
|
||||
TOOLS += vscclient$(EXESUF)
|
||||
|
||||
# objects linked into a shared library, built with libtool with -fPIC if required
|
||||
QEMU_OBJS=$(oslib-obj-y) qemu-timer-common.o $(trace-obj-y) $(stub-obj-y)
|
||||
QEMU_OBJS_LIB=$(patsubst %.o,%.lo,$(QEMU_OBJS))
|
||||
libcacard-obj-y = $(stub-obj-y) $(libcacard-y)
|
||||
libcacard-obj-y += util/osdep.o util/cutils.o util/qemu-timer-common.o util/error.o
|
||||
libcacard-obj-$(CONFIG_WIN32) += util/oslib-win32.o util/qemu-thread-win32.o
|
||||
libcacard-obj-$(CONFIG_POSIX) += util/oslib-posix.o util/qemu-thread-posix.o
|
||||
libcacard-obj-y += $(filter trace/%, $(util-obj-y))
|
||||
|
||||
QEMU_CFLAGS+=-I../
|
||||
libcacard-lobj-y=$(patsubst %.o,%.lo,$(libcacard-obj-y))
|
||||
|
||||
libcacard.lib-y=$(patsubst %.o,%.lo,$(libcacard-y))
|
||||
|
||||
vscclient: $(libcacard-y) $(QEMU_OBJS) vscclient.o cutils.o
|
||||
$(call quiet-command,$(CC) -o $@ $^ $(libcacard_libs) $(LIBS)," LINK $@")
|
||||
|
||||
clean:
|
||||
rm -f *.o */*.o *.d */*.d *.a */*.a *~ */*~ vscclient *.lo */*.lo .libs/* */.libs/* *.la */*.la *.pc
|
||||
rm -Rf .libs */.libs
|
||||
# libtool will build the .o files, too
|
||||
$(libcacard-obj-y): | $(libcacard-lobj-y)
|
||||
|
||||
all: libcacard.la libcacard.pc
|
||||
# Dummy command so that make thinks it has done something
|
||||
@true
|
||||
|
||||
vscclient$(EXESUF): libcacard/vscclient.o libcacard.la
|
||||
$(call LINK,$^)
|
||||
|
||||
#########################################################################
|
||||
# Rules for building libcacard standalone library
|
||||
|
||||
ifeq ($(LIBTOOL),)
|
||||
libcacard.la:
|
||||
@echo "libtool is missing, please install and rerun configure"; exit 1
|
||||
libcacard.la: LDFLAGS += -rpath $(libdir) -no-undefined \
|
||||
-export-syms $(SRC_PATH)/libcacard/libcacard.syms
|
||||
libcacard.la: LIBS += $(libcacard_libs)
|
||||
libcacard.la: $(libcacard-lobj-y)
|
||||
$(call LINK,$^)
|
||||
|
||||
install-libcacard:
|
||||
@echo "libtool is missing, please install and rerun configure"; exit 1
|
||||
else
|
||||
libcacard.la: $(libcacard.lib-y) $(QEMU_OBJS_LIB)
|
||||
$(call quiet-command,$(LIBTOOL) --mode=link --quiet --tag=CC $(CC) -rpath $(libdir) -o $@ $^ $(libcacard_libs)," lt LINK $@")
|
||||
|
||||
libcacard_srcpath=$(SRC_PATH)/libcacard
|
||||
libcacard.pc: $(libcacard_srcpath)/libcacard.pc.in
|
||||
libcacard.pc: $(SRC_PATH)/libcacard/libcacard.pc.in
|
||||
$(call quiet-command,sed -e 's|@LIBDIR@|$(libdir)|' \
|
||||
-e 's|@INCLUDEDIR@|$(libcacard_includedir)|' \
|
||||
-e 's|@VERSION@|$(shell cat $(SRC_PATH)/VERSION)|' \
|
||||
-e 's|@PREFIX@|$(prefix)|' \
|
||||
< $(libcacard_srcpath)/libcacard.pc.in > libcacard.pc,\
|
||||
-e 's|@PREFIX@|$(prefix)|' $< > libcacard.pc,\
|
||||
" GEN $@")
|
||||
|
||||
.PHONY: install-libcacard
|
||||
|
||||
install-libcacard: libcacard.pc libcacard.la vscclient
|
||||
install: install-libcacard
|
||||
install-libcacard: libcacard.pc libcacard.la
|
||||
$(INSTALL_DIR) "$(DESTDIR)$(libdir)"
|
||||
$(INSTALL_DIR) "$(DESTDIR)$(libdir)/pkgconfig"
|
||||
$(INSTALL_DIR) "$(DESTDIR)$(libcacard_includedir)"
|
||||
$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
|
||||
$(LIBTOOL) --mode=install $(INSTALL_PROG) vscclient "$(DESTDIR)$(bindir)"
|
||||
$(LIBTOOL) --mode=install $(INSTALL_DATA) libcacard.la "$(DESTDIR)$(libdir)"
|
||||
$(LIBTOOL) --mode=install $(INSTALL_DATA) libcacard.pc "$(DESTDIR)$(libdir)/pkgconfig"
|
||||
for inc in *.h; do \
|
||||
$(LIBTOOL) --mode=install $(INSTALL_DATA) $(libcacard_srcpath)/$$inc "$(DESTDIR)$(libcacard_includedir)"; \
|
||||
$(INSTALL_LIB) libcacard.la "$(DESTDIR)$(libdir)"
|
||||
$(INSTALL_DATA) libcacard.pc "$(DESTDIR)$(libdir)/pkgconfig"
|
||||
for inc in $(SRC_PATH)/libcacard/*.h; do \
|
||||
$(INSTALL_DATA) $$inc "$(DESTDIR)$(libcacard_includedir)"; \
|
||||
done
|
||||
endif
|
||||
|
77
libcacard/libcacard.syms
Normal file
77
libcacard/libcacard.syms
Normal file
@ -0,0 +1,77 @@
|
||||
cac_card_init
|
||||
cac_is_cac_card
|
||||
vcard_add_applet
|
||||
vcard_apdu_delete
|
||||
vcard_apdu_new
|
||||
vcard_applet_get_aid
|
||||
vcard_buffer_response_delete
|
||||
vcard_buffer_response_new
|
||||
vcard_delete_applet
|
||||
vcard_emul_delete_key
|
||||
vcard_emul_force_card_insert
|
||||
vcard_emul_force_card_remove
|
||||
vcard_emul_get_atr
|
||||
vcard_emul_get_login_count
|
||||
vcard_emul_init
|
||||
vcard_emul_login
|
||||
vcard_emul_options
|
||||
vcard_emul_replay_insertion_events
|
||||
vcard_emul_reset
|
||||
vcard_emul_rsa_op
|
||||
vcard_emul_type_from_string
|
||||
vcard_emul_type_select
|
||||
vcard_emul_usage
|
||||
vcard_find_applet
|
||||
vcard_free
|
||||
vcard_get_atr
|
||||
vcard_get_buffer_response
|
||||
vcard_get_current_applet_private
|
||||
vcard_get_private
|
||||
vcard_get_type
|
||||
vcard_init
|
||||
vcard_make_response
|
||||
vcard_new
|
||||
vcard_new_applet
|
||||
vcard_process_apdu
|
||||
vcard_process_applet_apdu
|
||||
vcard_reference
|
||||
vcard_reset
|
||||
vcard_response_delete
|
||||
vcard_response_new
|
||||
vcard_response_new_bytes
|
||||
vcard_response_new_data
|
||||
vcard_response_new_status_bytes
|
||||
vcard_select_applet
|
||||
vcard_set_applet_private
|
||||
vcard_set_atr_func
|
||||
vcard_set_buffer_response
|
||||
vcard_set_type
|
||||
vevent_delete
|
||||
vevent_get_next_vevent
|
||||
vevent_new
|
||||
vevent_queue_init
|
||||
vevent_queue_vevent
|
||||
vevent_wait_next_vevent
|
||||
vreader_add_reader
|
||||
vreader_card_is_present
|
||||
vreader_free
|
||||
vreader_get_id
|
||||
vreader_get_name
|
||||
vreader_get_private
|
||||
vreader_get_reader_by_id
|
||||
vreader_get_reader_by_name
|
||||
vreader_get_reader_list
|
||||
vreader_init
|
||||
vreader_insert_card
|
||||
vreader_list_delete
|
||||
vreader_list_get_first
|
||||
vreader_list_get_next
|
||||
vreader_list_get_reader
|
||||
vreader_new
|
||||
vreader_power_off
|
||||
vreader_power_on
|
||||
vreader_queue_card_event
|
||||
vreader_reference
|
||||
vreader_remove_reader
|
||||
vreader_set_id
|
||||
vreader_xfr_bytes
|
22
monitor.c
22
monitor.c
@ -4791,3 +4791,25 @@ int monitor_read_block_device_key(Monitor *mon, const char *device,
|
||||
|
||||
return monitor_read_bdrv_key_start(mon, bs, completion_cb, opaque);
|
||||
}
|
||||
|
||||
QemuOptsList qemu_mon_opts = {
|
||||
.name = "mon",
|
||||
.implied_opt_name = "chardev",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "mode",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "chardev",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "default",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "pretty",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
26
net/net.c
26
net/net.c
@ -1054,3 +1054,29 @@ unsigned compute_mcast_idx(const uint8_t *ep)
|
||||
}
|
||||
return crc >> 26;
|
||||
}
|
||||
|
||||
QemuOptsList qemu_netdev_opts = {
|
||||
.name = "netdev",
|
||||
.implied_opt_name = "type",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_netdev_opts.head),
|
||||
.desc = {
|
||||
/*
|
||||
* no elements => accept any params
|
||||
* validation will happen later
|
||||
*/
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
QemuOptsList qemu_net_opts = {
|
||||
.name = "net",
|
||||
.implied_opt_name = "type",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_net_opts.head),
|
||||
.desc = {
|
||||
/*
|
||||
* no elements => accept any params
|
||||
* validation will happen later
|
||||
*/
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
qapi-obj-y = qapi-visit-core.o qapi-dealloc-visitor.o qmp-input-visitor.o
|
||||
qapi-obj-y += qmp-output-visitor.o qmp-registry.o qmp-dispatch.o
|
||||
qapi-obj-y += string-input-visitor.o string-output-visitor.o
|
||||
util-obj-y = qapi-visit-core.o qapi-dealloc-visitor.o qmp-input-visitor.o
|
||||
util-obj-y += qmp-output-visitor.o qmp-registry.o qmp-dispatch.o
|
||||
util-obj-y += string-input-visitor.o string-output-visitor.o
|
||||
|
||||
common-obj-y += opts-visitor.o
|
||||
util-obj-y += opts-visitor.o
|
||||
|
72
qemu-char.c
72
qemu-char.c
@ -2924,3 +2924,75 @@ CharDriverState *qemu_char_get_next_serial(void)
|
||||
return serial_hds[next_serial++];
|
||||
}
|
||||
|
||||
QemuOptsList qemu_chardev_opts = {
|
||||
.name = "chardev",
|
||||
.implied_opt_name = "backend",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "backend",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "path",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "host",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "port",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "localaddr",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "localport",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "to",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "ipv4",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "ipv6",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "wait",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "server",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "delay",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "telnet",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "width",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "height",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "cols",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "rows",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "mux",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "signal",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "name",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "debug",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
894
qemu-config.c
894
qemu-config.c
@ -1,894 +0,0 @@
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/option.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "hw/qdev.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
static QemuOptsList qemu_drive_opts = {
|
||||
.name = "drive",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "bus",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "bus number",
|
||||
},{
|
||||
.name = "unit",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "unit number (i.e. lun for scsi)",
|
||||
},{
|
||||
.name = "if",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
|
||||
},{
|
||||
.name = "index",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "index number",
|
||||
},{
|
||||
.name = "cyls",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "number of cylinders (ide disk geometry)",
|
||||
},{
|
||||
.name = "heads",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "number of heads (ide disk geometry)",
|
||||
},{
|
||||
.name = "secs",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "number of sectors (ide disk geometry)",
|
||||
},{
|
||||
.name = "trans",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "chs translation (auto, lba. none)",
|
||||
},{
|
||||
.name = "media",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "media type (disk, cdrom)",
|
||||
},{
|
||||
.name = "snapshot",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "enable/disable snapshot mode",
|
||||
},{
|
||||
.name = "file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "disk image",
|
||||
},{
|
||||
.name = "cache",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "host cache usage (none, writeback, writethrough, "
|
||||
"directsync, unsafe)",
|
||||
},{
|
||||
.name = "aio",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "host AIO implementation (threads, native)",
|
||||
},{
|
||||
.name = "format",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "disk format (raw, qcow2, ...)",
|
||||
},{
|
||||
.name = "serial",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "disk serial number",
|
||||
},{
|
||||
.name = "rerror",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "read error action",
|
||||
},{
|
||||
.name = "werror",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "write error action",
|
||||
},{
|
||||
.name = "addr",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "pci address (virtio only)",
|
||||
},{
|
||||
.name = "readonly",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "open drive file as read-only",
|
||||
},{
|
||||
.name = "iops",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit total I/O operations per second",
|
||||
},{
|
||||
.name = "iops_rd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit read operations per second",
|
||||
},{
|
||||
.name = "iops_wr",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit write operations per second",
|
||||
},{
|
||||
.name = "bps",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit total bytes per second",
|
||||
},{
|
||||
.name = "bps_rd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit read bytes per second",
|
||||
},{
|
||||
.name = "bps_wr",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "limit write bytes per second",
|
||||
},{
|
||||
.name = "copy-on-read",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "copy read data from backing file into image file",
|
||||
},{
|
||||
.name = "boot",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "(deprecated, ignored)",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_iscsi_opts = {
|
||||
.name = "iscsi",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "user",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "username for CHAP authentication to target",
|
||||
},{
|
||||
.name = "password",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "password for CHAP authentication to target",
|
||||
},{
|
||||
.name = "header-digest",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "HeaderDigest setting. "
|
||||
"{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
|
||||
},{
|
||||
.name = "initiator-name",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Initiator iqn name to use when connecting",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_chardev_opts = {
|
||||
.name = "chardev",
|
||||
.implied_opt_name = "backend",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "backend",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "path",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "host",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "port",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "localaddr",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "localport",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "to",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "ipv4",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "ipv6",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "wait",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "server",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "delay",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "telnet",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "width",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "height",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "cols",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "rows",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "mux",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "signal",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "name",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "debug",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
QemuOptsList qemu_fsdev_opts = {
|
||||
.name = "fsdev",
|
||||
.implied_opt_name = "fsdriver",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_fsdev_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "fsdriver",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "path",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "security_model",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "writeout",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "readonly",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
|
||||
}, {
|
||||
.name = "socket",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "sock_fd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},
|
||||
|
||||
{ /*End of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
QemuOptsList qemu_virtfs_opts = {
|
||||
.name = "virtfs",
|
||||
.implied_opt_name = "fsdriver",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_virtfs_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "fsdriver",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "path",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "mount_tag",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "security_model",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "writeout",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "readonly",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
}, {
|
||||
.name = "socket",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "sock_fd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},
|
||||
|
||||
{ /*End of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_device_opts = {
|
||||
.name = "device",
|
||||
.implied_opt_name = "driver",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_device_opts.head),
|
||||
.desc = {
|
||||
/*
|
||||
* no elements => accept any
|
||||
* sanity checking will happen later
|
||||
* when setting device properties
|
||||
*/
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_netdev_opts = {
|
||||
.name = "netdev",
|
||||
.implied_opt_name = "type",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_netdev_opts.head),
|
||||
.desc = {
|
||||
/*
|
||||
* no elements => accept any params
|
||||
* validation will happen later
|
||||
*/
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_net_opts = {
|
||||
.name = "net",
|
||||
.implied_opt_name = "type",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_net_opts.head),
|
||||
.desc = {
|
||||
/*
|
||||
* no elements => accept any params
|
||||
* validation will happen later
|
||||
*/
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_rtc_opts = {
|
||||
.name = "rtc",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "base",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "clock",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "driftfix",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_global_opts = {
|
||||
.name = "global",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_global_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "driver",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "property",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "value",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
QemuOptsList qemu_sandbox_opts = {
|
||||
.name = "sandbox",
|
||||
.implied_opt_name = "enable",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_sandbox_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "enable",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_mon_opts = {
|
||||
.name = "mon",
|
||||
.implied_opt_name = "chardev",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "mode",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "chardev",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "default",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "pretty",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_trace_opts = {
|
||||
.name = "trace",
|
||||
.implied_opt_name = "trace",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "events",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
QemuOptsList qemu_spice_opts = {
|
||||
.name = "spice",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_spice_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "port",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "tls-port",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "addr",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "ipv4",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "ipv6",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "password",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "disable-ticketing",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "disable-copy-paste",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "sasl",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "x509-dir",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-key-file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-key-password",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-cert-file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-cacert-file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-dh-key-file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "tls-ciphers",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "tls-channel",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "plaintext-channel",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "image-compression",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "jpeg-wan-compression",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "zlib-glz-wan-compression",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "streaming-video",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "agent-mouse",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "playback-compression",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
}, {
|
||||
.name = "seamless-migration",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
QemuOptsList qemu_option_rom_opts = {
|
||||
.name = "option-rom",
|
||||
.implied_opt_name = "romfile",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "bootindex",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
}, {
|
||||
.name = "romfile",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_machine_opts = {
|
||||
.name = "machine",
|
||||
.implied_opt_name = "type",
|
||||
.merge_lists = true,
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "type",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "emulated machine"
|
||||
}, {
|
||||
.name = "accel",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "accelerator list",
|
||||
}, {
|
||||
.name = "kernel_irqchip",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "use KVM in-kernel irqchip",
|
||||
}, {
|
||||
.name = "kvm_shadow_mem",
|
||||
.type = QEMU_OPT_SIZE,
|
||||
.help = "KVM shadow MMU size",
|
||||
}, {
|
||||
.name = "kernel",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Linux kernel image file",
|
||||
}, {
|
||||
.name = "initrd",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Linux initial ramdisk file",
|
||||
}, {
|
||||
.name = "append",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Linux kernel command line",
|
||||
}, {
|
||||
.name = "dtb",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Linux kernel device tree file",
|
||||
}, {
|
||||
.name = "dumpdtb",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Dump current dtb to a file and quit",
|
||||
}, {
|
||||
.name = "phandle_start",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "The first phandle ID we may generate dynamically",
|
||||
}, {
|
||||
.name = "dt_compatible",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Overrides the \"compatible\" property of the dt root node",
|
||||
}, {
|
||||
.name = "dump-guest-core",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "Include guest memory in a core dump",
|
||||
}, {
|
||||
.name = "mem-merge",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "enable/disable memory merge support",
|
||||
},{
|
||||
.name = "usb",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "Set on/off to enable/disable usb",
|
||||
}, {
|
||||
.name = "nvram",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Drive backing persistent NVRAM",
|
||||
},
|
||||
{ /* End of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
QemuOptsList qemu_boot_opts = {
|
||||
.name = "boot-opts",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
|
||||
.desc = {
|
||||
/* the three names below are not used now */
|
||||
{
|
||||
.name = "order",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "once",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "menu",
|
||||
.type = QEMU_OPT_STRING,
|
||||
/* following are really used */
|
||||
}, {
|
||||
.name = "splash",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "splash-time",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "reboot-timeout",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /*End of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_add_fd_opts = {
|
||||
.name = "add-fd",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "fd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "file descriptor of which a duplicate is added to fd set",
|
||||
},{
|
||||
.name = "set",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "ID of the fd set to add fd to",
|
||||
},{
|
||||
.name = "opaque",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "free-form string used to describe fd",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_object_opts = {
|
||||
.name = "object",
|
||||
.implied_opt_name = "qom-type",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
|
||||
.desc = {
|
||||
{ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList *vm_config_groups[32] = {
|
||||
&qemu_drive_opts,
|
||||
&qemu_chardev_opts,
|
||||
&qemu_device_opts,
|
||||
&qemu_netdev_opts,
|
||||
&qemu_net_opts,
|
||||
&qemu_rtc_opts,
|
||||
&qemu_global_opts,
|
||||
&qemu_mon_opts,
|
||||
&qemu_trace_opts,
|
||||
&qemu_option_rom_opts,
|
||||
&qemu_machine_opts,
|
||||
&qemu_boot_opts,
|
||||
&qemu_iscsi_opts,
|
||||
&qemu_sandbox_opts,
|
||||
&qemu_add_fd_opts,
|
||||
&qemu_object_opts,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static QemuOptsList *find_list(QemuOptsList **lists, const char *group,
|
||||
Error **errp)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; lists[i] != NULL; i++) {
|
||||
if (strcmp(lists[i]->name, group) == 0)
|
||||
break;
|
||||
}
|
||||
if (lists[i] == NULL) {
|
||||
error_set(errp, QERR_INVALID_OPTION_GROUP, group);
|
||||
}
|
||||
return lists[i];
|
||||
}
|
||||
|
||||
QemuOptsList *qemu_find_opts(const char *group)
|
||||
{
|
||||
QemuOptsList *ret;
|
||||
Error *local_err = NULL;
|
||||
|
||||
ret = find_list(vm_config_groups, group, &local_err);
|
||||
if (error_is_set(&local_err)) {
|
||||
error_report("%s\n", error_get_pretty(local_err));
|
||||
error_free(local_err);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp)
|
||||
{
|
||||
return find_list(vm_config_groups, group, errp);
|
||||
}
|
||||
|
||||
void qemu_add_opts(QemuOptsList *list)
|
||||
{
|
||||
int entries, i;
|
||||
|
||||
entries = ARRAY_SIZE(vm_config_groups);
|
||||
entries--; /* keep list NULL terminated */
|
||||
for (i = 0; i < entries; i++) {
|
||||
if (vm_config_groups[i] == NULL) {
|
||||
vm_config_groups[i] = list;
|
||||
return;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, "ran out of space in vm_config_groups");
|
||||
abort();
|
||||
}
|
||||
|
||||
int qemu_set_option(const char *str)
|
||||
{
|
||||
char group[64], id[64], arg[64];
|
||||
QemuOptsList *list;
|
||||
QemuOpts *opts;
|
||||
int rc, offset;
|
||||
|
||||
rc = sscanf(str, "%63[^.].%63[^.].%63[^=]%n", group, id, arg, &offset);
|
||||
if (rc < 3 || str[offset] != '=') {
|
||||
error_report("can't parse: \"%s\"", str);
|
||||
return -1;
|
||||
}
|
||||
|
||||
list = qemu_find_opts(group);
|
||||
if (list == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
opts = qemu_opts_find(list, id);
|
||||
if (!opts) {
|
||||
error_report("there is no %s \"%s\" defined",
|
||||
list->name, id);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qemu_opt_set(opts, arg, str+offset+1) == -1) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qemu_global_option(const char *str)
|
||||
{
|
||||
char driver[64], property[64];
|
||||
QemuOpts *opts;
|
||||
int rc, offset;
|
||||
|
||||
rc = sscanf(str, "%63[^.].%63[^=]%n", driver, property, &offset);
|
||||
if (rc < 2 || str[offset] != '=') {
|
||||
error_report("can't parse: \"%s\"", str);
|
||||
return -1;
|
||||
}
|
||||
|
||||
opts = qemu_opts_create_nofail(&qemu_global_opts);
|
||||
qemu_opt_set(opts, "driver", driver);
|
||||
qemu_opt_set(opts, "property", property);
|
||||
qemu_opt_set(opts, "value", str+offset+1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct ConfigWriteData {
|
||||
QemuOptsList *list;
|
||||
FILE *fp;
|
||||
};
|
||||
|
||||
static int config_write_opt(const char *name, const char *value, void *opaque)
|
||||
{
|
||||
struct ConfigWriteData *data = opaque;
|
||||
|
||||
fprintf(data->fp, " %s = \"%s\"\n", name, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int config_write_opts(QemuOpts *opts, void *opaque)
|
||||
{
|
||||
struct ConfigWriteData *data = opaque;
|
||||
const char *id = qemu_opts_id(opts);
|
||||
|
||||
if (id) {
|
||||
fprintf(data->fp, "[%s \"%s\"]\n", data->list->name, id);
|
||||
} else {
|
||||
fprintf(data->fp, "[%s]\n", data->list->name);
|
||||
}
|
||||
qemu_opt_foreach(opts, config_write_opt, data, 0);
|
||||
fprintf(data->fp, "\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qemu_config_write(FILE *fp)
|
||||
{
|
||||
struct ConfigWriteData data = { .fp = fp };
|
||||
QemuOptsList **lists = vm_config_groups;
|
||||
int i;
|
||||
|
||||
fprintf(fp, "# qemu config file\n\n");
|
||||
for (i = 0; lists[i] != NULL; i++) {
|
||||
data.list = lists[i];
|
||||
qemu_opts_foreach(data.list, config_write_opts, &data, 0);
|
||||
}
|
||||
}
|
||||
|
||||
int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
|
||||
{
|
||||
char line[1024], group[64], id[64], arg[64], value[1024];
|
||||
Location loc;
|
||||
QemuOptsList *list = NULL;
|
||||
Error *local_err = NULL;
|
||||
QemuOpts *opts = NULL;
|
||||
int res = -1, lno = 0;
|
||||
|
||||
loc_push_none(&loc);
|
||||
while (fgets(line, sizeof(line), fp) != NULL) {
|
||||
loc_set_file(fname, ++lno);
|
||||
if (line[0] == '\n') {
|
||||
/* skip empty lines */
|
||||
continue;
|
||||
}
|
||||
if (line[0] == '#') {
|
||||
/* comment */
|
||||
continue;
|
||||
}
|
||||
if (sscanf(line, "[%63s \"%63[^\"]\"]", group, id) == 2) {
|
||||
/* group with id */
|
||||
list = find_list(lists, group, &local_err);
|
||||
if (error_is_set(&local_err)) {
|
||||
error_report("%s\n", error_get_pretty(local_err));
|
||||
error_free(local_err);
|
||||
goto out;
|
||||
}
|
||||
opts = qemu_opts_create(list, id, 1, NULL);
|
||||
continue;
|
||||
}
|
||||
if (sscanf(line, "[%63[^]]]", group) == 1) {
|
||||
/* group without id */
|
||||
list = find_list(lists, group, &local_err);
|
||||
if (error_is_set(&local_err)) {
|
||||
error_report("%s\n", error_get_pretty(local_err));
|
||||
error_free(local_err);
|
||||
goto out;
|
||||
}
|
||||
opts = qemu_opts_create_nofail(list);
|
||||
continue;
|
||||
}
|
||||
if (sscanf(line, " %63s = \"%1023[^\"]\"", arg, value) == 2) {
|
||||
/* arg = value */
|
||||
if (opts == NULL) {
|
||||
error_report("no group defined");
|
||||
goto out;
|
||||
}
|
||||
if (qemu_opt_set(opts, arg, value) != 0) {
|
||||
goto out;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
error_report("parse error");
|
||||
goto out;
|
||||
}
|
||||
if (ferror(fp)) {
|
||||
error_report("error reading file");
|
||||
goto out;
|
||||
}
|
||||
res = 0;
|
||||
out:
|
||||
loc_pop(&loc);
|
||||
return res;
|
||||
}
|
||||
|
||||
int qemu_read_config_file(const char *filename)
|
||||
{
|
||||
FILE *f = fopen(filename, "r");
|
||||
int ret;
|
||||
|
||||
if (f == NULL) {
|
||||
return -errno;
|
||||
}
|
||||
|
||||
ret = qemu_config_parse(f, vm_config_groups, filename);
|
||||
fclose(f);
|
||||
|
||||
if (ret == 0) {
|
||||
return 0;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
115
qemu-tool.c
115
qemu-tool.c
@ -1,115 +0,0 @@
|
||||
/*
|
||||
* Compatibility for qemu-img/qemu-nbd
|
||||
*
|
||||
* Copyright IBM, Corp. 2008
|
||||
*
|
||||
* Authors:
|
||||
* Anthony Liguori <aliguori@us.ibm.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
* Contributions after 2012-01-13 are licensed under the terms of the
|
||||
* GNU GPL, version 2 or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "monitor/monitor.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "qemu/log.h"
|
||||
#include "migration/migration.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "qemu/sockets.h"
|
||||
#include "slirp/libslirp.h"
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
struct QEMUBH
|
||||
{
|
||||
QEMUBHFunc *cb;
|
||||
void *opaque;
|
||||
};
|
||||
|
||||
const char *qemu_get_vm_name(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Monitor *cur_mon;
|
||||
|
||||
void vm_stop(RunState state)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
int monitor_cur_is_qmp(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void monitor_set_error(Monitor *mon, QError *qerror)
|
||||
{
|
||||
}
|
||||
|
||||
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
|
||||
{
|
||||
}
|
||||
|
||||
void monitor_printf(Monitor *mon, const char *fmt, ...)
|
||||
{
|
||||
}
|
||||
|
||||
void monitor_print_filename(Monitor *mon, const char *filename)
|
||||
{
|
||||
}
|
||||
|
||||
void monitor_protocol_event(MonitorEvent event, QObject *data)
|
||||
{
|
||||
}
|
||||
|
||||
int64_t cpu_get_clock(void)
|
||||
{
|
||||
return get_clock_realtime();
|
||||
}
|
||||
|
||||
int64_t cpu_get_icount(void)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
void qemu_mutex_lock_iothread(void)
|
||||
{
|
||||
}
|
||||
|
||||
void qemu_mutex_unlock_iothread(void)
|
||||
{
|
||||
}
|
||||
|
||||
int use_icount;
|
||||
|
||||
void qemu_clock_warp(QEMUClock *clock)
|
||||
{
|
||||
}
|
||||
|
||||
void slirp_update_timeout(uint32_t *timeout)
|
||||
{
|
||||
}
|
||||
|
||||
void slirp_select_fill(int *pnfds, fd_set *readfds,
|
||||
fd_set *writefds, fd_set *xfds)
|
||||
{
|
||||
}
|
||||
|
||||
void slirp_select_poll(fd_set *readfds, fd_set *writefds,
|
||||
fd_set *xfds, int select_error)
|
||||
{
|
||||
}
|
||||
|
||||
void migrate_add_blocker(Error *reason)
|
||||
{
|
||||
}
|
||||
|
||||
void migrate_del_blocker(Error *reason)
|
||||
{
|
||||
}
|
37
qemu-user.c
37
qemu-user.c
@ -1,37 +0,0 @@
|
||||
/*
|
||||
* Stubs for QEMU user emulation
|
||||
*
|
||||
* Copyright (c) 2012 SUSE LINUX Products GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see
|
||||
* <http://www.gnu.org/licenses/gpl-2.0.html>
|
||||
*/
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
Monitor *cur_mon;
|
||||
|
||||
int monitor_cur_is_qmp(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
|
||||
{
|
||||
}
|
||||
|
||||
void monitor_set_error(Monitor *mon, QError *qerror)
|
||||
{
|
||||
}
|
3
qobject/Makefile.objs
Normal file
3
qobject/Makefile.objs
Normal file
@ -0,0 +1,3 @@
|
||||
util-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o
|
||||
util-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o
|
||||
util-obj-y += qerror.o
|
@ -1,4 +1,2 @@
|
||||
qom-obj-y = object.o container.o qom-qobject.o
|
||||
qom-obj-twice-y = cpu.o
|
||||
common-obj-y = $(qom-obj-twice-y)
|
||||
user-obj-y = $(qom-obj-twice-y)
|
||||
universal-obj-y = object.o container.o qom-qobject.o
|
||||
universal-obj-y += cpu.o
|
||||
|
20
rules.mak
20
rules.mak
@ -21,11 +21,22 @@ QEMU_CFLAGS += -I$(<D) -I$(@D)
|
||||
$(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," CC $(TARGET_DIR)$@")
|
||||
|
||||
ifeq ($(LIBTOOL),)
|
||||
%.lo: %.c
|
||||
@echo "missing libtool. please install and rerun configure"; exit 1
|
||||
LIBTOOL = /bin/false
|
||||
LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ \
|
||||
$(sort $(filter %.o, $1)) $(filter-out %.o, $1) $(version-obj-y) \
|
||||
$(LIBS)," LINK $(TARGET_DIR)$@")
|
||||
else
|
||||
LIBTOOL += $(if $(V),,--quiet)
|
||||
%.lo: %.c
|
||||
$(call quiet-command,$(LIBTOOL) --mode=compile --quiet --tag=CC $(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," lt CC $@")
|
||||
$(call quiet-command,$(LIBTOOL) --mode=compile --tag=CC $(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," lt CC $@")
|
||||
%.lo: %.dtrace
|
||||
$(call quiet-command,$(LIBTOOL) --mode=compile --tag=CC dtrace -o $@ -G -s $<, " lt GEN $(TARGET_DIR)$@")
|
||||
|
||||
LINK = $(call quiet-command,\
|
||||
$(if $(filter %.lo %.la,$^),$(LIBTOOL) --mode=link --tag=CC \
|
||||
)$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ \
|
||||
$(sort $(filter %.o, $1)) $(filter-out %.o, $1) $(version-obj-y) \
|
||||
$(LIBS),$(if $(filter %.lo %.la,$^),"lt LINK ", " LINK ")"$(TARGET_DIR)$@")
|
||||
endif
|
||||
|
||||
%.asm: %.S
|
||||
@ -37,7 +48,8 @@ endif
|
||||
%.o: %.m
|
||||
$(call quiet-command,$(OBJCC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," OBJC $(TARGET_DIR)$@")
|
||||
|
||||
LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(sort $(filter %.o, $1)) $(filter-out %.o, $1) $(LIBS)," LINK $(TARGET_DIR)$@")
|
||||
%.o: %.dtrace
|
||||
$(call quiet-command,dtrace -o $@ -G -s $<, " GEN $(TARGET_DIR)$@")
|
||||
|
||||
%$(EXESUF): %.o
|
||||
$(call LINK,$^)
|
||||
|
@ -1,11 +1,24 @@
|
||||
stub-obj-y += arch-query-cpu-def.o
|
||||
stub-obj-y += clock-warp.o
|
||||
stub-obj-y += cpu-get-clock.o
|
||||
stub-obj-y += cpu-get-icount.o
|
||||
stub-obj-y += fdset-add-fd.o
|
||||
stub-obj-y += fdset-find-fd.o
|
||||
stub-obj-y += fdset-get-fd.o
|
||||
stub-obj-y += fdset-remove-fd.o
|
||||
stub-obj-y += get-fd.o
|
||||
stub-obj-y += set-fd-handler.o
|
||||
stub-obj-y += get-vm-name.o
|
||||
stub-obj-y += iothread-lock.o
|
||||
stub-obj-y += migr-blocker.o
|
||||
stub-obj-y += mon-is-qmp.o
|
||||
stub-obj-y += mon-printf.o
|
||||
stub-obj-y += mon-print-filename.o
|
||||
stub-obj-y += mon-protocol-event.o
|
||||
stub-obj-y += mon-set-error.o
|
||||
stub-obj-y += reset.o
|
||||
stub-obj-y += vmstate.o
|
||||
stub-obj-y += set-fd-handler.o
|
||||
stub-obj-y += slirp.o
|
||||
stub-obj-y += sysbus.o
|
||||
stub-obj-y += vm-stop.o
|
||||
stub-obj-y += vmstate.o
|
||||
stub-obj-$(CONFIG_WIN32) += fd-register.o
|
||||
|
7
stubs/clock-warp.c
Normal file
7
stubs/clock-warp.c
Normal file
@ -0,0 +1,7 @@
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/timer.h"
|
||||
|
||||
void qemu_clock_warp(QEMUClock *clock)
|
||||
{
|
||||
}
|
||||
|
7
stubs/cpu-get-clock.c
Normal file
7
stubs/cpu-get-clock.c
Normal file
@ -0,0 +1,7 @@
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/timer.h"
|
||||
|
||||
int64_t cpu_get_clock(void)
|
||||
{
|
||||
return get_clock_realtime();
|
||||
}
|
9
stubs/cpu-get-icount.c
Normal file
9
stubs/cpu-get-icount.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/timer.h"
|
||||
|
||||
int use_icount;
|
||||
|
||||
int64_t cpu_get_icount(void)
|
||||
{
|
||||
abort();
|
||||
}
|
7
stubs/get-vm-name.c
Normal file
7
stubs/get-vm-name.c
Normal file
@ -0,0 +1,7 @@
|
||||
#include "qemu-common.h"
|
||||
|
||||
const char *qemu_get_vm_name(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
10
stubs/iothread-lock.c
Normal file
10
stubs/iothread-lock.c
Normal file
@ -0,0 +1,10 @@
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/main-loop.h"
|
||||
|
||||
void qemu_mutex_lock_iothread(void)
|
||||
{
|
||||
}
|
||||
|
||||
void qemu_mutex_unlock_iothread(void)
|
||||
{
|
||||
}
|
10
stubs/migr-blocker.c
Normal file
10
stubs/migr-blocker.c
Normal file
@ -0,0 +1,10 @@
|
||||
#include "qemu-common.h"
|
||||
#include "migration/migration.h"
|
||||
|
||||
void migrate_add_blocker(Error *reason)
|
||||
{
|
||||
}
|
||||
|
||||
void migrate_del_blocker(Error *reason)
|
||||
{
|
||||
}
|
7
stubs/mon-is-qmp.c
Normal file
7
stubs/mon-is-qmp.c
Normal file
@ -0,0 +1,7 @@
|
||||
#include "qemu-common.h"
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
int monitor_cur_is_qmp(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
6
stubs/mon-print-filename.c
Normal file
6
stubs/mon-print-filename.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include "qemu-common.h"
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
void monitor_print_filename(Monitor *mon, const char *filename)
|
||||
{
|
||||
}
|
10
stubs/mon-printf.c
Normal file
10
stubs/mon-printf.c
Normal file
@ -0,0 +1,10 @@
|
||||
#include "qemu-common.h"
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
void monitor_printf(Monitor *mon, const char *fmt, ...)
|
||||
{
|
||||
}
|
||||
|
||||
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
|
||||
{
|
||||
}
|
6
stubs/mon-protocol-event.c
Normal file
6
stubs/mon-protocol-event.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include "qemu-common.h"
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
void monitor_protocol_event(MonitorEvent event, QObject *data)
|
||||
{
|
||||
}
|
8
stubs/mon-set-error.c
Normal file
8
stubs/mon-set-error.c
Normal file
@ -0,0 +1,8 @@
|
||||
#include "qemu-common.h"
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
Monitor *cur_mon;
|
||||
|
||||
void monitor_set_error(Monitor *mon, QError *qerror)
|
||||
{
|
||||
}
|
17
stubs/slirp.c
Normal file
17
stubs/slirp.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include "qemu-common.h"
|
||||
#include "slirp/slirp.h"
|
||||
|
||||
void slirp_update_timeout(uint32_t *timeout)
|
||||
{
|
||||
}
|
||||
|
||||
void slirp_select_fill(int *pnfds, fd_set *readfds,
|
||||
fd_set *writefds, fd_set *xfds)
|
||||
{
|
||||
}
|
||||
|
||||
void slirp_select_poll(fd_set *readfds, fd_set *writefds,
|
||||
fd_set *xfds, int select_error)
|
||||
{
|
||||
}
|
||||
|
7
stubs/vm-stop.c
Normal file
7
stubs/vm-stop.c
Normal file
@ -0,0 +1,7 @@
|
||||
#include "qemu-common.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
||||
void vm_stop(RunState state)
|
||||
{
|
||||
abort();
|
||||
}
|
@ -70,22 +70,20 @@ test-obj-y = tests/check-qint.o tests/check-qstring.o tests/check-qdict.o \
|
||||
tests/test-qmp-input-visitor.o tests/test-qmp-input-strict.o \
|
||||
tests/test-qmp-commands.o tests/test-visitor-serialization.o
|
||||
|
||||
test-qapi-obj-y = $(qobject-obj-y) $(qapi-obj-y) qemu-tool.o
|
||||
test-qapi-obj-y += tests/test-qapi-visit.o tests/test-qapi-types.o
|
||||
test-qapi-obj-y += module.o
|
||||
test-qapi-obj-y = tests/test-qapi-visit.o tests/test-qapi-types.o
|
||||
|
||||
$(test-obj-y): QEMU_INCLUDES += -Itests
|
||||
|
||||
tests/check-qint$(EXESUF): tests/check-qint.o qint.o
|
||||
tests/check-qstring$(EXESUF): tests/check-qstring.o qstring.o
|
||||
tests/check-qdict$(EXESUF): tests/check-qdict.o qdict.o qfloat.o qint.o qstring.o qbool.o qlist.o
|
||||
tests/check-qlist$(EXESUF): tests/check-qlist.o qlist.o qint.o
|
||||
tests/check-qfloat$(EXESUF): tests/check-qfloat.o qfloat.o
|
||||
tests/check-qjson$(EXESUF): tests/check-qjson.o $(qobject-obj-y) qemu-tool.o
|
||||
tests/test-coroutine$(EXESUF): tests/test-coroutine.o $(coroutine-obj-y) $(tools-obj-y) $(block-obj-y) iov.o libqemustub.a
|
||||
tests/test-aio$(EXESUF): tests/test-aio.o $(coroutine-obj-y) $(tools-obj-y) $(block-obj-y) libqemustub.a
|
||||
tests/test-thread-pool$(EXESUF): tests/test-thread-pool.o $(coroutine-obj-y) $(tools-obj-y) $(block-obj-y) libqemustub.a
|
||||
tests/test-iov$(EXESUF): tests/test-iov.o iov.o
|
||||
tests/check-qint$(EXESUF): tests/check-qint.o libqemuutil.a
|
||||
tests/check-qstring$(EXESUF): tests/check-qstring.o libqemuutil.a
|
||||
tests/check-qdict$(EXESUF): tests/check-qdict.o libqemuutil.a
|
||||
tests/check-qlist$(EXESUF): tests/check-qlist.o libqemuutil.a
|
||||
tests/check-qfloat$(EXESUF): tests/check-qfloat.o libqemuutil.a
|
||||
tests/check-qjson$(EXESUF): tests/check-qjson.o libqemuutil.a libqemustub.a
|
||||
tests/test-coroutine$(EXESUF): tests/test-coroutine.o $(block-obj-y) libqemuutil.a libqemustub.a
|
||||
tests/test-aio$(EXESUF): tests/test-aio.o $(block-obj-y) libqemuutil.a libqemustub.a
|
||||
tests/test-thread-pool$(EXESUF): tests/test-thread-pool.o $(block-obj-y) libqemuutil.a libqemustub.a
|
||||
tests/test-iov$(EXESUF): tests/test-iov.o libqemuutil.a
|
||||
|
||||
tests/test-qapi-types.c tests/test-qapi-types.h :\
|
||||
$(SRC_PATH)/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-types.py
|
||||
@ -98,18 +96,18 @@ $(SRC_PATH)/qapi-schema-test.json $(SRC_PATH)/scripts/qapi-commands.py
|
||||
$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-commands.py $(gen-out-type) -o tests -p "test-" < $<, " GEN $@")
|
||||
|
||||
|
||||
tests/test-string-output-visitor$(EXESUF): tests/test-string-output-visitor.o $(test-qapi-obj-y)
|
||||
tests/test-string-input-visitor$(EXESUF): tests/test-string-input-visitor.o $(test-qapi-obj-y)
|
||||
tests/test-qmp-output-visitor$(EXESUF): tests/test-qmp-output-visitor.o $(test-qapi-obj-y)
|
||||
tests/test-qmp-input-visitor$(EXESUF): tests/test-qmp-input-visitor.o $(test-qapi-obj-y)
|
||||
tests/test-qmp-input-strict$(EXESUF): tests/test-qmp-input-strict.o $(test-qapi-obj-y)
|
||||
tests/test-qmp-commands$(EXESUF): tests/test-qmp-commands.o tests/test-qmp-marshal.o $(test-qapi-obj-y)
|
||||
tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y)
|
||||
tests/test-string-output-visitor$(EXESUF): tests/test-string-output-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||
tests/test-string-input-visitor$(EXESUF): tests/test-string-input-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||
tests/test-qmp-output-visitor$(EXESUF): tests/test-qmp-output-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||
tests/test-qmp-input-visitor$(EXESUF): tests/test-qmp-input-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||
tests/test-qmp-input-strict$(EXESUF): tests/test-qmp-input-strict.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||
tests/test-qmp-commands$(EXESUF): tests/test-qmp-commands.o tests/test-qmp-marshal.o $(test-qapi-obj-y) qapi-types.o qapi-visit.o libqemuutil.a libqemustub.a
|
||||
tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||
|
||||
tests/rtc-test$(EXESUF): tests/rtc-test.o $(trace-obj-y)
|
||||
tests/m48t59-test$(EXESUF): tests/m48t59-test.o $(trace-obj-y)
|
||||
tests/fdc-test$(EXESUF): tests/fdc-test.o tests/libqtest.o $(trace-obj-y)
|
||||
tests/hd-geo-test$(EXESUF): tests/hd-geo-test.o tests/libqtest.o $(trace-obj-y)
|
||||
tests/rtc-test$(EXESUF): tests/rtc-test.o
|
||||
tests/m48t59-test$(EXESUF): tests/m48t59-test.o
|
||||
tests/fdc-test$(EXESUF): tests/fdc-test.o
|
||||
tests/hd-geo-test$(EXESUF): tests/hd-geo-test.o
|
||||
|
||||
# QTest rules
|
||||
|
||||
@ -117,7 +115,7 @@ TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGET_DIRS)))
|
||||
QTEST_TARGETS=$(foreach TARGET,$(TARGETS), $(if $(check-qtest-$(TARGET)-y), $(TARGET),))
|
||||
check-qtest-$(CONFIG_POSIX)=$(foreach TARGET,$(TARGETS), $(check-qtest-$(TARGET)-y))
|
||||
|
||||
qtest-obj-y = tests/libqtest.o $(oslib-obj-y) libqemustub.a
|
||||
qtest-obj-y = tests/libqtest.o libqemuutil.a libqemustub.a
|
||||
$(check-qtest-y): $(qtest-obj-y)
|
||||
|
||||
.PHONY: check-help
|
||||
|
@ -1,12 +1,9 @@
|
||||
# -*- mode: makefile -*-
|
||||
|
||||
######################################################################
|
||||
# Auto-generated tracing routines
|
||||
# Auto-generated header for tracing routines
|
||||
|
||||
ifeq ($(TRACE_BACKEND),dtrace)
|
||||
TRACE_H_EXTRA_DEPS=$(obj)/generated-tracers-dtrace.h
|
||||
endif
|
||||
$(obj)/generated-tracers.h: $(obj)/generated-tracers.h-timestamp $(TRACE_H_EXTRA_DEPS)
|
||||
$(obj)/generated-tracers.h: $(obj)/generated-tracers.h-timestamp
|
||||
$(obj)/generated-tracers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--format=h \
|
||||
@ -14,6 +11,10 @@ $(obj)/generated-tracers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/conf
|
||||
< $< > $@," GEN $(patsubst %-timestamp,%,$@)")
|
||||
@cmp -s $@ $(patsubst %-timestamp,%,$@) || cp $@ $(patsubst %-timestamp,%,$@)
|
||||
|
||||
######################################################################
|
||||
# Auto-generated tracing routines (non-DTrace)
|
||||
|
||||
ifneq ($(TRACE_BACKEND),dtrace)
|
||||
$(obj)/generated-tracers.c: $(obj)/generated-tracers.c-timestamp
|
||||
$(obj)/generated-tracers.c-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
@ -23,9 +24,6 @@ $(obj)/generated-tracers.c-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/conf
|
||||
@cmp -s $@ $(patsubst %-timestamp,%,$@) || cp $@ $(patsubst %-timestamp,%,$@)
|
||||
|
||||
$(obj)/generated-tracers.o: $(obj)/generated-tracers.c $(obj)/generated-tracers.h
|
||||
|
||||
ifneq ($(TRACE_BACKEND),dtrace)
|
||||
trace-obj-y += generated-tracers.o
|
||||
endif
|
||||
|
||||
|
||||
@ -35,36 +33,26 @@ endif
|
||||
# Normal practice is to name DTrace probe file with a '.d' extension
|
||||
# but that gets picked up by QEMU's Makefile as an external dependency
|
||||
# rule file. So we use '.dtrace' instead
|
||||
$(obj)/generated-tracers-dtrace.dtrace: $(obj)/generated-tracers-dtrace.dtrace-timestamp
|
||||
$(obj)/generated-tracers-dtrace.dtrace-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak
|
||||
ifeq ($(TRACE_BACKEND),dtrace)
|
||||
$(obj)/generated-tracers.dtrace: $(obj)/generated-tracers.dtrace-timestamp
|
||||
$(obj)/generated-tracers.dtrace-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--format=d \
|
||||
--backend=$(TRACE_BACKEND) \
|
||||
< $< > $@," GEN $(patsubst %-timestamp,%,$@)")
|
||||
@cmp -s $@ $(patsubst %-timestamp,%,$@) || cp $@ $(patsubst %-timestamp,%,$@)
|
||||
|
||||
$(obj)/generated-tracers-dtrace.h: trace/generated-tracers-dtrace.dtrace
|
||||
$(obj)/generated-tracers-dtrace.h: $(obj)/generated-tracers.dtrace
|
||||
$(call quiet-command,dtrace -o $@ -h -s $<, " GEN $@")
|
||||
|
||||
$(obj)/generated-tracers-dtrace.o: trace/generated-tracers-dtrace.dtrace
|
||||
$(call quiet-command,dtrace -o $@ -G -s $<, " GEN $@")
|
||||
|
||||
trace-obj-$(CONFIG_TRACE_DTRACE) += generated-tracers-dtrace.o
|
||||
|
||||
|
||||
ifeq ($(LIBTOOL),)
|
||||
$(obj)/generated-tracers-dtrace.lo: $(obj)/generated-tracers-dtrace.dtrace
|
||||
@echo "missing libtool. please install and rerun configure."; exit 1
|
||||
else
|
||||
$(obj)/generated-tracers-dtrace.lo: $(obj)/generated-tracers-dtrace.dtrace
|
||||
$(call quiet-command,$(LIBTOOL) --mode=compile --tag=CC dtrace -o $@ -G -s $<, " lt GEN $@")
|
||||
$(obj)/generated-tracers.o: $(obj)/generated-tracers.dtrace
|
||||
endif
|
||||
|
||||
|
||||
######################################################################
|
||||
# Backend code
|
||||
|
||||
trace-obj-$(CONFIG_TRACE_DEFAULT) += default.o
|
||||
trace-obj-$(CONFIG_TRACE_SIMPLE) += simple.o
|
||||
trace-obj-$(CONFIG_TRACE_STDERR) += stderr.o
|
||||
trace-obj-y += control.o
|
||||
util-obj-$(CONFIG_TRACE_DEFAULT) += default.o
|
||||
util-obj-$(CONFIG_TRACE_SIMPLE) += simple.o
|
||||
util-obj-$(CONFIG_TRACE_STDERR) += stderr.o
|
||||
util-obj-y += control.o
|
||||
util-obj-y += generated-tracers.o
|
||||
|
@ -417,6 +417,90 @@ static SpiceChannelList *qmp_query_spice_channels(void)
|
||||
return head;
|
||||
}
|
||||
|
||||
static QemuOptsList qemu_spice_opts = {
|
||||
.name = "spice",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_spice_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "port",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "tls-port",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
},{
|
||||
.name = "addr",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "ipv4",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "ipv6",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "password",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "disable-ticketing",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "disable-copy-paste",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "sasl",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "x509-dir",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-key-file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-key-password",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-cert-file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-cacert-file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "x509-dh-key-file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "tls-ciphers",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "tls-channel",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "plaintext-channel",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "image-compression",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "jpeg-wan-compression",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "zlib-glz-wan-compression",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "streaming-video",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "agent-mouse",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "playback-compression",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
}, {
|
||||
.name = "seamless-migration",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
SpiceInfo *qmp_query_spice(Error **errp)
|
||||
{
|
||||
QemuOpts *opts = QTAILQ_FIRST(&qemu_spice_opts.head);
|
||||
|
10
util/Makefile.objs
Normal file
10
util/Makefile.objs
Normal file
@ -0,0 +1,10 @@
|
||||
util-obj-y = osdep.o cutils.o qemu-timer-common.o
|
||||
util-obj-$(CONFIG_WIN32) += oslib-win32.o qemu-thread-win32.o event_notifier-win32.o
|
||||
util-obj-$(CONFIG_POSIX) += oslib-posix.o qemu-thread-posix.o event_notifier-posix.o
|
||||
util-obj-y += envlist.o path.o host-utils.o cache-utils.o module.o
|
||||
util-obj-y += bitmap.o bitops.o
|
||||
util-obj-y += acl.o
|
||||
util-obj-y += error.o qemu-error.o
|
||||
util-obj-$(CONFIG_POSIX) += compatfd.o
|
||||
util-obj-y += iov.o aes.o qemu-config.o qemu-sockets.o uri.o notify.o
|
||||
util-obj-y += qemu-option.o qemu-progress.o
|
215
util/qemu-config.c
Normal file
215
util/qemu-config.c
Normal file
@ -0,0 +1,215 @@
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/option.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "hw/qdev.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
static QemuOptsList *vm_config_groups[32];
|
||||
|
||||
static QemuOptsList *find_list(QemuOptsList **lists, const char *group,
|
||||
Error **errp)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; lists[i] != NULL; i++) {
|
||||
if (strcmp(lists[i]->name, group) == 0)
|
||||
break;
|
||||
}
|
||||
if (lists[i] == NULL) {
|
||||
error_set(errp, QERR_INVALID_OPTION_GROUP, group);
|
||||
}
|
||||
return lists[i];
|
||||
}
|
||||
|
||||
QemuOptsList *qemu_find_opts(const char *group)
|
||||
{
|
||||
QemuOptsList *ret;
|
||||
Error *local_err = NULL;
|
||||
|
||||
ret = find_list(vm_config_groups, group, &local_err);
|
||||
if (error_is_set(&local_err)) {
|
||||
error_report("%s\n", error_get_pretty(local_err));
|
||||
error_free(local_err);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp)
|
||||
{
|
||||
return find_list(vm_config_groups, group, errp);
|
||||
}
|
||||
|
||||
void qemu_add_opts(QemuOptsList *list)
|
||||
{
|
||||
int entries, i;
|
||||
|
||||
entries = ARRAY_SIZE(vm_config_groups);
|
||||
entries--; /* keep list NULL terminated */
|
||||
for (i = 0; i < entries; i++) {
|
||||
if (vm_config_groups[i] == NULL) {
|
||||
vm_config_groups[i] = list;
|
||||
return;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, "ran out of space in vm_config_groups");
|
||||
abort();
|
||||
}
|
||||
|
||||
int qemu_set_option(const char *str)
|
||||
{
|
||||
char group[64], id[64], arg[64];
|
||||
QemuOptsList *list;
|
||||
QemuOpts *opts;
|
||||
int rc, offset;
|
||||
|
||||
rc = sscanf(str, "%63[^.].%63[^.].%63[^=]%n", group, id, arg, &offset);
|
||||
if (rc < 3 || str[offset] != '=') {
|
||||
error_report("can't parse: \"%s\"", str);
|
||||
return -1;
|
||||
}
|
||||
|
||||
list = qemu_find_opts(group);
|
||||
if (list == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
opts = qemu_opts_find(list, id);
|
||||
if (!opts) {
|
||||
error_report("there is no %s \"%s\" defined",
|
||||
list->name, id);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qemu_opt_set(opts, arg, str+offset+1) == -1) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct ConfigWriteData {
|
||||
QemuOptsList *list;
|
||||
FILE *fp;
|
||||
};
|
||||
|
||||
static int config_write_opt(const char *name, const char *value, void *opaque)
|
||||
{
|
||||
struct ConfigWriteData *data = opaque;
|
||||
|
||||
fprintf(data->fp, " %s = \"%s\"\n", name, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int config_write_opts(QemuOpts *opts, void *opaque)
|
||||
{
|
||||
struct ConfigWriteData *data = opaque;
|
||||
const char *id = qemu_opts_id(opts);
|
||||
|
||||
if (id) {
|
||||
fprintf(data->fp, "[%s \"%s\"]\n", data->list->name, id);
|
||||
} else {
|
||||
fprintf(data->fp, "[%s]\n", data->list->name);
|
||||
}
|
||||
qemu_opt_foreach(opts, config_write_opt, data, 0);
|
||||
fprintf(data->fp, "\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qemu_config_write(FILE *fp)
|
||||
{
|
||||
struct ConfigWriteData data = { .fp = fp };
|
||||
QemuOptsList **lists = vm_config_groups;
|
||||
int i;
|
||||
|
||||
fprintf(fp, "# qemu config file\n\n");
|
||||
for (i = 0; lists[i] != NULL; i++) {
|
||||
data.list = lists[i];
|
||||
qemu_opts_foreach(data.list, config_write_opts, &data, 0);
|
||||
}
|
||||
}
|
||||
|
||||
int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname)
|
||||
{
|
||||
char line[1024], group[64], id[64], arg[64], value[1024];
|
||||
Location loc;
|
||||
QemuOptsList *list = NULL;
|
||||
Error *local_err = NULL;
|
||||
QemuOpts *opts = NULL;
|
||||
int res = -1, lno = 0;
|
||||
|
||||
loc_push_none(&loc);
|
||||
while (fgets(line, sizeof(line), fp) != NULL) {
|
||||
loc_set_file(fname, ++lno);
|
||||
if (line[0] == '\n') {
|
||||
/* skip empty lines */
|
||||
continue;
|
||||
}
|
||||
if (line[0] == '#') {
|
||||
/* comment */
|
||||
continue;
|
||||
}
|
||||
if (sscanf(line, "[%63s \"%63[^\"]\"]", group, id) == 2) {
|
||||
/* group with id */
|
||||
list = find_list(lists, group, &local_err);
|
||||
if (error_is_set(&local_err)) {
|
||||
error_report("%s\n", error_get_pretty(local_err));
|
||||
error_free(local_err);
|
||||
goto out;
|
||||
}
|
||||
opts = qemu_opts_create(list, id, 1, NULL);
|
||||
continue;
|
||||
}
|
||||
if (sscanf(line, "[%63[^]]]", group) == 1) {
|
||||
/* group without id */
|
||||
list = find_list(lists, group, &local_err);
|
||||
if (error_is_set(&local_err)) {
|
||||
error_report("%s\n", error_get_pretty(local_err));
|
||||
error_free(local_err);
|
||||
goto out;
|
||||
}
|
||||
opts = qemu_opts_create_nofail(list);
|
||||
continue;
|
||||
}
|
||||
if (sscanf(line, " %63s = \"%1023[^\"]\"", arg, value) == 2) {
|
||||
/* arg = value */
|
||||
if (opts == NULL) {
|
||||
error_report("no group defined");
|
||||
goto out;
|
||||
}
|
||||
if (qemu_opt_set(opts, arg, value) != 0) {
|
||||
goto out;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
error_report("parse error");
|
||||
goto out;
|
||||
}
|
||||
if (ferror(fp)) {
|
||||
error_report("error reading file");
|
||||
goto out;
|
||||
}
|
||||
res = 0;
|
||||
out:
|
||||
loc_pop(&loc);
|
||||
return res;
|
||||
}
|
||||
|
||||
int qemu_read_config_file(const char *filename)
|
||||
{
|
||||
FILE *f = fopen(filename, "r");
|
||||
int ret;
|
||||
|
||||
if (f == NULL) {
|
||||
return -errno;
|
||||
}
|
||||
|
||||
ret = qemu_config_parse(f, vm_config_groups, filename);
|
||||
fclose(f);
|
||||
|
||||
if (ret == 0) {
|
||||
return 0;
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
205
vl.c
205
vl.c
@ -299,6 +299,195 @@ static struct {
|
||||
{ .driver = "qxl-vga", .flag = &default_vga },
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_rtc_opts = {
|
||||
.name = "rtc",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "base",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "clock",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "driftfix",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_sandbox_opts = {
|
||||
.name = "sandbox",
|
||||
.implied_opt_name = "enable",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_sandbox_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "enable",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_trace_opts = {
|
||||
.name = "trace",
|
||||
.implied_opt_name = "trace",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "events",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},{
|
||||
.name = "file",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_option_rom_opts = {
|
||||
.name = "option-rom",
|
||||
.implied_opt_name = "romfile",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "bootindex",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
}, {
|
||||
.name = "romfile",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_machine_opts = {
|
||||
.name = "machine",
|
||||
.implied_opt_name = "type",
|
||||
.merge_lists = true,
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "type",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "emulated machine"
|
||||
}, {
|
||||
.name = "accel",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "accelerator list",
|
||||
}, {
|
||||
.name = "kernel_irqchip",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "use KVM in-kernel irqchip",
|
||||
}, {
|
||||
.name = "kvm_shadow_mem",
|
||||
.type = QEMU_OPT_SIZE,
|
||||
.help = "KVM shadow MMU size",
|
||||
}, {
|
||||
.name = "kernel",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Linux kernel image file",
|
||||
}, {
|
||||
.name = "initrd",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Linux initial ramdisk file",
|
||||
}, {
|
||||
.name = "append",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Linux kernel command line",
|
||||
}, {
|
||||
.name = "dtb",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Linux kernel device tree file",
|
||||
}, {
|
||||
.name = "dumpdtb",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Dump current dtb to a file and quit",
|
||||
}, {
|
||||
.name = "phandle_start",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "The first phandle ID we may generate dynamically",
|
||||
}, {
|
||||
.name = "dt_compatible",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "Overrides the \"compatible\" property of the dt root node",
|
||||
}, {
|
||||
.name = "dump-guest-core",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "Include guest memory in a core dump",
|
||||
}, {
|
||||
.name = "mem-merge",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "enable/disable memory merge support",
|
||||
},{
|
||||
.name = "usb",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
.help = "Set on/off to enable/disable usb",
|
||||
},
|
||||
{ /* End of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_boot_opts = {
|
||||
.name = "boot-opts",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
|
||||
.desc = {
|
||||
/* the three names below are not used now */
|
||||
{
|
||||
.name = "order",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "once",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "menu",
|
||||
.type = QEMU_OPT_STRING,
|
||||
/* following are really used */
|
||||
}, {
|
||||
.name = "splash",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "splash-time",
|
||||
.type = QEMU_OPT_STRING,
|
||||
}, {
|
||||
.name = "reboot-timeout",
|
||||
.type = QEMU_OPT_STRING,
|
||||
},
|
||||
{ /*End of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_add_fd_opts = {
|
||||
.name = "add-fd",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
|
||||
.desc = {
|
||||
{
|
||||
.name = "fd",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "file descriptor of which a duplicate is added to fd set",
|
||||
},{
|
||||
.name = "set",
|
||||
.type = QEMU_OPT_NUMBER,
|
||||
.help = "ID of the fd set to add fd to",
|
||||
},{
|
||||
.name = "opaque",
|
||||
.type = QEMU_OPT_STRING,
|
||||
.help = "free-form string used to describe fd",
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
static QemuOptsList qemu_object_opts = {
|
||||
.name = "object",
|
||||
.implied_opt_name = "qom-type",
|
||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
|
||||
.desc = {
|
||||
{ }
|
||||
},
|
||||
};
|
||||
|
||||
const char *qemu_get_vm_name(void)
|
||||
{
|
||||
return qemu_name;
|
||||
@ -2566,6 +2755,22 @@ int main(int argc, char **argv, char **envp)
|
||||
|
||||
module_call_init(MODULE_INIT_QOM);
|
||||
|
||||
qemu_add_opts(&qemu_drive_opts);
|
||||
qemu_add_opts(&qemu_chardev_opts);
|
||||
qemu_add_opts(&qemu_device_opts);
|
||||
qemu_add_opts(&qemu_netdev_opts);
|
||||
qemu_add_opts(&qemu_net_opts);
|
||||
qemu_add_opts(&qemu_rtc_opts);
|
||||
qemu_add_opts(&qemu_global_opts);
|
||||
qemu_add_opts(&qemu_mon_opts);
|
||||
qemu_add_opts(&qemu_trace_opts);
|
||||
qemu_add_opts(&qemu_option_rom_opts);
|
||||
qemu_add_opts(&qemu_machine_opts);
|
||||
qemu_add_opts(&qemu_boot_opts);
|
||||
qemu_add_opts(&qemu_sandbox_opts);
|
||||
qemu_add_opts(&qemu_add_fd_opts);
|
||||
qemu_add_opts(&qemu_object_opts);
|
||||
|
||||
runstate_init();
|
||||
|
||||
init_clocks();
|
||||
|
Loading…
Reference in New Issue
Block a user