[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default
From: |
Hu Tao |
Subject: |
[Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default |
Date: |
Fri, 5 Apr 2013 14:36:21 +0800 |
Also parse command line options for ioport and set
it accordingly.
Signed-off-by: Hu Tao <address@hidden>
---
hw/i386/pc_piix.c | 2 ++
hw/i386/pc_q35.c | 1 +
hw/pc.h | 4 ++++
hw/pvpanic.c | 42 ++++++++++++++++++++++++++++++++++++++++++
vl.c | 2 ++
5 files changed, 51 insertions(+)
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 0abc9f1..897254a 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -217,6 +217,8 @@ static void pc_init1(MemoryRegion *system_memory,
if (pci_enabled) {
pc_pci_device_init(pci_bus);
}
+
+ pvpanic_init(isa_bus);
}
static void pc_init_pci(QEMUMachineInitArgs *args)
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 4f5f347..fd9ab01 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -204,6 +204,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args)
pc_vga_init(isa_bus, host_bus);
audio_init(isa_bus, host_bus);
pc_nic_init(isa_bus, host_bus);
+ pvpanic_init(isa_bus);
if (pci_enabled) {
pc_pci_device_init(host_bus);
}
diff --git a/hw/pc.h b/hw/pc.h
index 8e1dd4c..1311037 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -178,6 +178,10 @@ static inline bool isa_ne2000_init(ISABus *bus, int base,
int irq, NICInfo *nd)
/* pc_sysfw.c */
void pc_system_firmware_init(MemoryRegion *rom_memory);
+/* pvpanic.c */
+int pvpanic_init(ISABus *bus);
+int pvpanic_ioport(QemuOpts *opts, void *opaque);
+
/* e820 types */
#define E820_RAM 1
#define E820_RESERVED 2
diff --git a/hw/pvpanic.c b/hw/pvpanic.c
index b3d10e2..2e237a4 100644
--- a/hw/pvpanic.c
+++ b/hw/pvpanic.c
@@ -19,6 +19,8 @@
#include <sysemu/kvm.h>
#include "hw/fw_cfg.h"
+#include "hw/pc.h"
+#include "qapi/string-input-visitor.h"
/* The bit of supported pv event */
#define PVPANIC_F_PANICKED 0
@@ -57,6 +59,36 @@ typedef struct PVPanicState {
uint16_t ioport;
} PVPanicState;
+static uint16_t ioport;
+
+static int set_ioport(const char *name, const char *value, void *opaque)
+{
+ StringInputVisitor *mi;
+
+ if (strcmp(name, "ioport") == 0) {
+ mi = string_input_visitor_new(value);
+ visit_type_uint16(string_input_get_visitor(mi), &ioport, "ioport",
+ NULL);
+ string_input_visitor_cleanup(mi);
+ }
+
+ return 0;
+}
+
+int pvpanic_ioport(QemuOpts *opts, void *opaque)
+{
+ const char *driver;
+
+ driver = qemu_opt_get(opts, "driver");
+ if (!driver || strcmp(driver, "pvpanic")) {
+ return 0;
+ }
+
+ qemu_opt_foreach(opts, set_ioport, NULL, 0);
+
+ return 0;
+}
+
/* return supported events on read */
static uint64_t pvpanic_ioport_read(void *opaque, hwaddr addr, unsigned size)
{
@@ -84,6 +116,10 @@ static int pvpanic_isa_initfn(ISADevice *dev)
static bool port_configured;
void *fw_cfg;
+ if (ioport) {
+ s->ioport = ioport;
+ }
+
memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
isa_register_ioport(dev, &s->io, s->ioport);
@@ -115,6 +151,12 @@ static void pvpanic_isa_class_init(ObjectClass *klass,
void *data)
dc->props = pvpanic_isa_properties;
}
+int pvpanic_init(ISABus *bus)
+{
+ isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
+ return 0;
+}
+
static TypeInfo pvpanic_isa_info = {
.name = TYPE_ISA_PVPANIC_DEVICE,
.parent = TYPE_ISA_DEVICE,
diff --git a/vl.c b/vl.c
index c91fd4e..1a3ffa2 100644
--- a/vl.c
+++ b/vl.c
@@ -4302,6 +4302,8 @@ int main(int argc, char **argv, char **envp)
exit (i == 1 ? 1 : 0);
}
+ qemu_opts_foreach(qemu_find_opts("device"), pvpanic_ioport, NULL, 0);
+
if (machine->compat_props) {
qdev_prop_register_global_list(machine->compat_props);
}
--
1.8.1.4
- [Qemu-devel] [PATCH v17 0/6] Add pvpanic device to deal with guest panic event, Hu Tao, 2013/04/05
- [Qemu-devel] [PATCH v17 2/6] add a new qevent: QEVENT_GUEST_PANICKED, Hu Tao, 2013/04/05
- [Qemu-devel] [PATCH v17 1/6] add a new runstate: RUN_STATE_GUEST_PANICKED, Hu Tao, 2013/04/05
- [Qemu-devel] [PATCH v17 4/6] pvpanic: pass configurable ioport to seabios, Hu Tao, 2013/04/05
- [Qemu-devel] [PATCH v17 3/6] introduce a new qom device to deal with panicked event, Hu Tao, 2013/04/05
- [Qemu-devel] [PATCH v17 6/6] pvpanic: add document of pvpanic, Hu Tao, 2013/04/05
- [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default,
Hu Tao <=
- [Qemu-devel] [PATCH v17] Add pvpanic device driver, Hu Tao, 2013/04/05
- [Qemu-devel] [PATCH v17] pvpanic: pvpanic device driver, Hu Tao, 2013/04/05