From: Gleb Natapov <gleb@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 2/2] Add get_dev_path callback to ISA bus in qdev.
Date: Sun, 24 Oct 2010 16:02:13 +0200 [thread overview]
Message-ID: <1287928933-11423-3-git-send-email-gleb@redhat.com> (raw)
In-Reply-To: <1287928933-11423-1-git-send-email-gleb@redhat.com>
Use device ioports to create unique device path.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
hw/isa-bus.c | 39 +++++++++++++++++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/hw/isa-bus.c b/hw/isa-bus.c
index c509d56..ed0b665 100644
--- a/hw/isa-bus.c
+++ b/hw/isa-bus.c
@@ -32,11 +32,13 @@ static ISABus *isabus;
target_phys_addr_t isa_mem_base = 0;
static void isabus_dev_print(Monitor *mon, DeviceState *dev, int indent);
+static char *isabus_get_dev_path(DeviceState *dev);
static struct BusInfo isa_bus_info = {
.name = "ISA",
.size = sizeof(ISABus),
.print_dev = isabus_dev_print,
+ .get_dev_path = isabus_get_dev_path,
};
ISABus *isa_bus_new(DeviceState *dev)
@@ -193,4 +195,41 @@ static void isabus_register_devices(void)
sysbus_register_withprop(&isabus_bridge_info);
}
+static int find_range_end(ISADevice *d, int i)
+{
+ uint16_t p = d->ioports[i++];
+
+ while (i < d->nioports) {
+ if (d->ioports[i] - p != 1) {
+ break;
+ }
+ p = d->ioports[i++];
+ }
+ return i - 1;
+}
+
+static char *isabus_get_dev_path(DeviceState *dev)
+{
+ ISADevice *d = (ISADevice*)dev;
+ char path[100];
+ int i = 0, off = 0;
+
+ while (i < d->nioports) {
+ int e = find_range_end(d, i);
+ if (off)
+ path[off++] = ',';
+ if (i == e) {
+ off += snprintf(path + off, sizeof(path) - off, "%04x",
+ d->ioports[i]);
+ i++;
+ } else {
+ off += snprintf(path + off, sizeof(path) - off, "%04x-%04x",
+ d->ioports[i], d->ioports[e]);
+ i = e + 1;
+ }
+ }
+
+ return strdup(path);
+}
+
device_init(isabus_register_devices)
--
1.7.1
next prev parent reply other threads:[~2010-10-24 14:02 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-24 14:02 [Qemu-devel] [PATCH 0/2] Add get_dev_path callback to ISA bus Gleb Natapov
2010-10-24 14:02 ` [Qemu-devel] [PATCH 1/2] Keep track of ISA ports ISA device is using in qdev Gleb Natapov
2010-10-25 15:06 ` Markus Armbruster
2010-10-25 16:58 ` Gleb Natapov
2010-10-25 18:01 ` Markus Armbruster
2010-10-25 18:15 ` Gleb Natapov
2010-10-26 9:49 ` Markus Armbruster
2010-10-26 10:29 ` Gleb Natapov
2010-10-24 14:02 ` Gleb Natapov [this message]
2010-10-25 15:10 ` [Qemu-devel] [PATCH 0/2] Add get_dev_path callback to ISA bus Markus Armbruster
2010-10-25 17:00 ` Gleb Natapov
2010-10-25 17:53 ` Markus Armbruster
2010-10-25 18:06 ` Gleb Natapov
2010-10-26 9:57 ` Markus Armbruster
2010-10-26 10:38 ` Gleb Natapov
2010-10-26 11:04 ` Markus Armbruster
2010-10-26 11:13 ` Gleb Natapov
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=1287928933-11423-3-git-send-email-gleb@redhat.com \
--to=gleb@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).