qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Andreas Färber" <andreas.faerber@web.de>
To: qemu-devel@nongnu.org
Cc: "Andreas Färber" <andreas.faerber@web.de>,
	hpoussin@reactos.org, kraxel@redhat.com
Subject: [Qemu-devel] [RFC v4 03/12] isa: Provide set_state callback
Date: Wed,  8 Jun 2011 20:55:10 +0200	[thread overview]
Message-ID: <1307559319-16183-4-git-send-email-andreas.faerber@web.de> (raw)
In-Reply-To: <1307559319-16183-3-git-send-email-andreas.faerber@web.de>

To allow enabling/disabling present ISA devices without hotplug,
keep track of state and add a helper to avoid enabling twice.
Since the properties to be configured are defined at device level,
delegate the actual work to a callback function.

If no callback is supplied, the device can't be disabled.

Prepare VMSTATE_ISA_DEVICE for devices that support disabling.
Legacy devices never change their state and won't need this yet.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Andreas Färber <andreas.faerber@web.de>
---
 hw/hw.h      |   15 +++++++++++++++
 hw/isa-bus.c |   29 +++++++++++++++++++++++++++++
 hw/isa.h     |    4 ++++
 3 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/hw/hw.h b/hw/hw.h
index 56447a7..07b1e2e 100644
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -628,6 +628,21 @@ extern const VMStateInfo vmstate_info_unused_buffer;
     .info         = &vmstate_info_unused_buffer,                     \
     .flags        = VMS_BUFFER,                                      \
 }
+
+extern const VMStateDescription vmstate_isa_device;
+
+#define VMSTATE_ISA_DEVICE_V(_field, _state, _version) {             \
+    .name       = (stringify(_field)),                               \
+    .version_id   = (_version),                                      \
+    .size       = sizeof(ISADevice),                                 \
+    .vmsd       = &vmstate_isa_device,                               \
+    .flags      = VMS_STRUCT,                                        \
+    .offset     = vmstate_offset_value(_state, _field, ISADevice),   \
+}
+
+#define VMSTATE_ISA_DEVICE(_field, _state) {                         \
+    VMSTATE_ISA_DEVICE_V(_field, _state, 0)
+
 extern const VMStateDescription vmstate_pci_device;
 
 #define VMSTATE_PCI_DEVICE(_field, _state) {                         \
diff --git a/hw/isa-bus.c b/hw/isa-bus.c
index 2765543..d258932 100644
--- a/hw/isa-bus.c
+++ b/hw/isa-bus.c
@@ -112,6 +112,7 @@ static int isa_qdev_init(DeviceState *qdev, DeviceInfo *base)
 
     dev->isairq[0] = -1;
     dev->isairq[1] = -1;
+    dev->enabled = true;
 
     return info->init(dev);
 }
@@ -156,6 +157,34 @@ ISADevice *isa_create_simple(const char *name)
     return dev;
 }
 
+const VMStateDescription vmstate_isa_device = {
+    .name = "ISADevice",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField []) {
+        VMSTATE_BOOL(enabled, ISADevice),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+int isa_set_state(ISADevice *dev, bool enabled)
+{
+    ISADeviceInfo *info = DO_UPCAST(ISADeviceInfo, qdev, dev->qdev.info);
+    int err;
+
+    if (dev->enabled == enabled) {
+        return 42;
+    } else if (info->set_state == NULL) {
+        return -1;
+    }
+    err = info->set_state(dev, enabled);
+    if (err < 0) {
+        return err;
+    }
+    dev->enabled = enabled;
+    return err;
+}
+
 static void isabus_dev_print(Monitor *mon, DeviceState *dev, int indent)
 {
     ISADevice *d = DO_UPCAST(ISADevice, qdev, dev);
diff --git a/hw/isa.h b/hw/isa.h
index d2b6126..5d460ab 100644
--- a/hw/isa.h
+++ b/hw/isa.h
@@ -16,12 +16,15 @@ struct ISADevice {
     int nirqs;
     uint16_t ioports[32];
     int nioports;
+    bool enabled;
 };
 
 typedef int (*isa_qdev_initfn)(ISADevice *dev);
+typedef int (*isa_qdev_statefn)(ISADevice *dev, bool enabled);
 struct ISADeviceInfo {
     DeviceInfo qdev;
     isa_qdev_initfn init;
+    isa_qdev_statefn set_state;
 };
 
 ISABus *isa_bus_new(DeviceState *dev);
@@ -34,6 +37,7 @@ void isa_qdev_register(ISADeviceInfo *info);
 ISADevice *isa_create(const char *name);
 ISADevice *isa_try_create(const char *name);
 ISADevice *isa_create_simple(const char *name);
+int isa_set_state(ISADevice *dev, bool enabled);
 
 extern target_phys_addr_t isa_mem_base;
 
-- 
1.7.5.3

  reply	other threads:[~2011-06-08 18:55 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-06 16:20 [Qemu-devel] [RFC 00/10] ISA reconfigurability Andreas Färber
2011-06-06 16:20 ` [Qemu-devel] [RFC 01/10] isa: Allow to un-assign I/O ports Andreas Färber
2011-06-06 16:20   ` [Qemu-devel] [RFC 02/10] isa: Allow to un-associate an IRQ Andreas Färber
2011-06-06 16:20     ` [Qemu-devel] [RFC 03/10] parallel: Allow to reconfigure ISA I/O base Andreas Färber
2011-06-06 16:20       ` [Qemu-devel] [RFC 04/10] parallel: Allow to reconfigure ISA IRQ Andreas Färber
2011-06-06 16:20         ` [Qemu-devel] [RFC 05/10] serial: Allow to reconfigure ISA I/O base Andreas Färber
2011-06-06 16:20           ` [Qemu-devel] [RFC 06/10] serial: Allow to reconfigure ISA IRQ Andreas Färber
2011-06-06 16:20             ` [Qemu-devel] [PATCH v2 07/10] fdc: Parametrize ISA base, IRQ and DMA Andreas Färber
2011-06-06 16:20               ` [Qemu-devel] [RFC 08/10] fdc: Allow to reconfigure ISA I/O base Andreas Färber
2011-06-06 16:20                 ` [Qemu-devel] [RFC 09/10] ide: " Andreas Färber
2011-06-06 16:20                   ` [Qemu-devel] [RFC 10/10] prep: Add pc87312 Super I/O emulation Andreas Färber
2011-06-06 20:08           ` [Qemu-devel] [RFC 05/10] serial: Allow to reconfigure ISA I/O base Richard Henderson
2011-06-06 20:25             ` Andreas Färber
2011-06-07  7:18 ` [Qemu-devel] [RFC 00/10] ISA reconfigurability Gerd Hoffmann
2011-06-07 15:02   ` [Qemu-devel] [RFC v2 00/10] ISA reconfigurability v2 Andreas Färber
2011-06-07 15:02     ` [Qemu-devel] [RFC v2 01/10] isa: Provide set_state callback Andreas Färber
2011-06-07 15:02       ` [Qemu-devel] [RFC v2 02/10] isa: Allow to un-assign I/O ports Andreas Färber
2011-06-07 15:02         ` [Qemu-devel] [RFC v2 03/10] isa: Allow to un-associate an IRQ Andreas Färber
2011-06-07 15:02           ` [Qemu-devel] [RFC v2 04/10] parallel: Implement ISA set_state callback Andreas Färber
2011-06-07 15:02             ` [Qemu-devel] [RFC v2 05/10] serial: Implement ISA set_state() callback Andreas Färber
2011-06-07 15:02               ` [Qemu-devel] [PATCH v2 06/10] fdc: Parametrize ISA base, IRQ and DMA Andreas Färber
2011-06-07 15:02                 ` [Qemu-devel] [RFC v2 07/10] fdc: Implement ISA set_state() callback Andreas Färber
2011-06-07 15:02                   ` [Qemu-devel] [RFC v2 08/10] ide: Allow to discard I/O ports Andreas Färber
2011-06-07 15:02                     ` [Qemu-devel] [RFC v2 09/10] ide: Implement ISA set_state() callback Andreas Färber
2011-06-07 15:02                       ` [Qemu-devel] [RFC v2 10/10] prep: Add pc87312 Super I/O emulation Andreas Färber
2011-06-07 15:16     ` [Qemu-devel] [RFC v2 00/10] ISA reconfigurability v2 Gerd Hoffmann
2011-06-07 22:36       ` Andreas Färber
2011-06-08  8:13         ` Gerd Hoffmann
2011-06-08 18:55           ` [Qemu-devel] [RFC v4 00/12] ISA reconfigurability v4 Andreas Färber
2011-06-08 18:55             ` [Qemu-devel] [PATCH v4 01/12] qdev: Add support for property type bool Andreas Färber
2011-06-08 18:55               ` [Qemu-devel] [PATCH v4 02/12] qdev: Add helpers for reading properties Andreas Färber
2011-06-08 18:55                 ` Andreas Färber [this message]
2011-06-08 18:55                   ` [Qemu-devel] [RFC v4 04/12] isa: Allow to un-assign I/O ports Andreas Färber
2011-06-08 18:55                     ` [Qemu-devel] [RFC v4 05/12] isa: Allow to un-associate an IRQ Andreas Färber
2011-06-08 18:55                       ` [Qemu-devel] [RFC v4 06/12] parallel: Implement ISA set_state callback Andreas Färber
2011-06-08 18:55                         ` [Qemu-devel] [RFC v4 07/12] serial: Implement ISA set_state() callback Andreas Färber
2011-06-08 18:55                           ` [Qemu-devel] [PATCH v4 08/12] fdc: Parametrize ISA base, IRQ and DMA Andreas Färber
2011-06-08 18:55                             ` [Qemu-devel] [RFC v4 09/12] fdc: Implement ISA set_state() callback Andreas Färber
2011-06-08 18:55                               ` [Qemu-devel] [RFC v4 10/12] ide: Allow to discard I/O ports Andreas Färber
2011-06-08 18:55                                 ` [Qemu-devel] [RFC v4 11/12] ide: Implement ISA set_state() callback Andreas Färber
2011-06-08 18:55                                   ` [Qemu-devel] [RFC v4 12/12] prep: Add pc87312 Super I/O emulation Andreas Färber
2011-06-09  7:56                               ` [Qemu-devel] [RFC v4 09/12] fdc: Implement ISA set_state() callback Gerd Hoffmann
2011-06-09  9:23                                 ` Andreas Färber
2011-06-09 15:35                           ` [Qemu-devel] [RFC v4 07/12] serial: " Markus Armbruster
2011-06-09 16:08                             ` Andreas Färber
2011-06-09 15:04                       ` [Qemu-devel] [RFC v4 05/12] isa: Allow to un-associate an IRQ Markus Armbruster
2011-06-09 15:12                         ` Markus Armbruster
2011-06-12 12:05                           ` Andreas Färber
2011-06-09 15:03                     ` [Qemu-devel] [RFC v4 04/12] isa: Allow to un-assign I/O ports Markus Armbruster
2011-06-12 11:59                       ` Andreas Färber
2011-06-12 13:48                         ` Gleb Natapov
2011-06-12 15:32                           ` Andreas Färber
2011-06-12 17:14                             ` Gleb Natapov
2011-06-09 10:39                   ` [Qemu-devel] [RFC v4 03/12] isa: Provide set_state callback Gerd Hoffmann
2011-06-09 11:37                     ` Andreas Färber
2011-06-09 12:23                       ` Gerd Hoffmann
2011-06-09 14:07                         ` Andreas Färber
2011-06-09 14:19                           ` Gerd Hoffmann
2011-06-09 16:04                           ` Markus Armbruster
2011-06-12 12:48                             ` Andreas Färber
2011-06-09 14:53                   ` Markus Armbruster
2011-06-12 11:46                     ` Andreas Färber
2011-06-09 14:45               ` [Qemu-devel] [PATCH v4 01/12] qdev: Add support for property type bool Markus Armbruster
2011-06-12 11:44                 ` Andreas Färber
2011-06-13 20:08             ` [Qemu-devel] [RFC v4 00/12] ISA reconfigurability v4 Blue Swirl
2011-06-13 21:09               ` Andreas Färber
2011-06-15 18:24                 ` Blue Swirl
2011-06-07 23:32       ` [Qemu-devel] [RFC v3 10/11] qdev: Add helpers for reading properties Andreas Färber
2011-06-07 23:32         ` [Qemu-devel] [RFC v3 11/11] prep: Add pc87312 Super I/O emulation Andreas Färber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1307559319-16183-4-git-send-email-andreas.faerber@web.de \
    --to=andreas.faerber@web.de \
    --cc=hpoussin@reactos.org \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).