From 09aaa1602f9381c0e0fb539390b1793e51bdfc7b Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Fri, 21 Aug 2009 10:31:34 +0200 Subject: qdev: convert watchdogs -watchdog NAME is now equivalent to -device NAME, except it treats option argument '?' specially, and supports only one watchdog. A side effect is that a device created with -watchdog may now receive a different PCI address. i6300esb is now available on any machine with a PCI bus, not just PCs. ib700 is still PC only, but that could be changed easily. The only remaining use of struct WatchdogTimerModel and watchdog_add_model() is supporting '-watchdog ?'. Should be replaced by searching device_info_list for watchdog devices when we can identify them there. Also fixes ib700 not to use vm_clock before it is initialized: in wdt_ib700_init(), called from register_watchdogs(), which runs before init_timers(). The bug made ib700_write_enable_reg() crash in qemu_del_timer(). Signed-off-by: Markus Armbruster Signed-off-by: Anthony Liguori --- hw/wdt_i6300esb.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'hw/wdt_i6300esb.c') diff --git a/hw/wdt_i6300esb.c b/hw/wdt_i6300esb.c index 282644e7a0..815dacc539 100644 --- a/hw/wdt_i6300esb.c +++ b/hw/wdt_i6300esb.c @@ -413,22 +413,11 @@ static int i6300esb_load(QEMUFile *f, void *vp, int version) return 0; } -/* Create and initialize a virtual Intel 6300ESB during PC creation. */ -static void i6300esb_pc_init(PCIBus *pci_bus) +static void i6300esb_init(PCIDevice *dev) { - I6300State *d; + I6300State *d = container_of(dev, I6300State, dev); uint8_t *pci_conf; - if (!pci_bus) { - fprintf(stderr, "wdt_i6300esb: no PCI bus in this machine\n"); - return; - } - - d = (I6300State *) - pci_register_device (pci_bus, "i6300esb_wdt", sizeof (I6300State), - -1, - i6300esb_config_read, i6300esb_config_write); - d->reboot_enabled = 1; d->clock_scale = CLOCK_SCALE_1KHZ; d->int_type = INT_TYPE_IRQ; @@ -458,10 +447,20 @@ static void i6300esb_pc_init(PCIBus *pci_bus) static WatchdogTimerModel model = { .wdt_name = "i6300esb", .wdt_description = "Intel 6300ESB", - .wdt_pc_init = i6300esb_pc_init, }; -void wdt_i6300esb_init(void) +static PCIDeviceInfo i6300esb_info = { + .qdev.name = "i6300esb", + .qdev.size = sizeof(I6300State), + .config_read = i6300esb_config_read, + .config_write = i6300esb_config_write, + .init = i6300esb_init, +}; + +static void i6300esb_register_devices(void) { watchdog_add_model(&model); + pci_qdev_register(&i6300esb_info); } + +device_init(i6300esb_register_devices); -- cgit v1.2.1