From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, blauwirbel@gmail.com,
aliguori@amazon.com, pcrost@xilinx.com, pbonzini@redhat.com,
afaerber@suse.de, aurelien@aurel32.net, rth@twiddle.net
Subject: [Qemu-devel] [PATCH v4 19/22] qdev: Add qdev property type for AddressSpaces
Date: Mon, 3 Feb 2014 19:44:47 +1000 [thread overview]
Message-ID: <1391420690-23745-20-git-send-email-edgar.iglesias@gmail.com> (raw)
In-Reply-To: <1391420690-23745-1-git-send-email-edgar.iglesias@gmail.com>
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
---
hw/core/qdev-properties-system.c | 8 ++++++
hw/core/qdev-properties.c | 54 ++++++++++++++++++++++++++++++++++++++++
include/hw/qdev-properties.h | 5 ++++
stubs/Makefile.objs | 1 +
stubs/memory.c | 6 +++++
5 files changed, 74 insertions(+)
create mode 100644 stubs/memory.c
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 3f29b49..27c2899 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -365,6 +365,14 @@ void qdev_prop_set_netdev(DeviceState *dev, const char *name,
value ? value->name : "", name, &error_abort);
}
+void qdev_prop_set_address_space(DeviceState *dev, const char *name,
+ AddressSpace *value)
+{
+ assert(!value || value->name);
+ object_property_set_str(OBJECT(dev),
+ value ? value->name : "", name, &error_abort);
+}
+
void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
{
qdev_prop_set_macaddr(dev, "mac", nd->macaddr.a);
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index b949f0e..68e09e2 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1176,3 +1176,57 @@ PropertyInfo qdev_prop_size = {
.get = get_size,
.set = set_size,
};
+
+/* --- AddressSpace --- */
+
+static int parse_address_space(DeviceState *dev, const char *name,
+ AddressSpace **ptr)
+{
+ AddressSpace *as = address_space_find_by_name(name);
+ if (as == NULL) {
+ return -ENOENT;
+ }
+ *ptr = as;
+ return 0;
+}
+
+static void get_address_space(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ AddressSpace *as = qdev_get_prop_ptr(DEVICE(obj), opaque);
+ char *p = (char *) (as ? as->name : "");
+
+ visit_type_str(v, &p, name, errp);
+}
+
+static void set_address_space(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ Error *local_err = NULL;
+ AddressSpace **as = qdev_get_prop_ptr(dev, prop);
+ char *str;
+ int ret;
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
+ visit_type_str(v, &str, name, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ ret = parse_address_space(dev, str, as);
+ error_set_from_qdev_prop_error(errp, ret, dev, prop, str);
+ g_free(str);
+}
+
+PropertyInfo qdev_prop_address_space = {
+ .name = "address_space",
+ .get = get_address_space,
+ .set = set_address_space,
+};
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 77c6f7c..020439f 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -19,6 +19,7 @@ extern PropertyInfo qdev_prop_size;
extern PropertyInfo qdev_prop_string;
extern PropertyInfo qdev_prop_chr;
extern PropertyInfo qdev_prop_ptr;
+extern PropertyInfo qdev_prop_address_space;
extern PropertyInfo qdev_prop_macaddr;
extern PropertyInfo qdev_prop_losttickpolicy;
extern PropertyInfo qdev_prop_bios_chs_trans;
@@ -141,6 +142,8 @@ extern PropertyInfo qdev_prop_arraylen;
#define DEFINE_PROP_PTR(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*)
+#define DEFINE_PROP_ADDRESS_SPACE(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_address_space, AddressSpace*)
#define DEFINE_PROP_CHR(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*)
#define DEFINE_PROP_STRING(_n, _s, _f) \
@@ -177,6 +180,8 @@ void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value);
void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value);
void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value);
void qdev_prop_set_string(DeviceState *dev, const char *name, const char *value);
+void qdev_prop_set_address_space(DeviceState *dev, const char *name,
+ AddressSpace *value);
void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value);
void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value);
int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) QEMU_WARN_UNUSED_RESULT;
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index df92fe5..9e1e5da 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -26,4 +26,5 @@ stub-obj-y += uuid.o
stub-obj-y += vm-stop.o
stub-obj-y += vmstate.o
stub-obj-$(CONFIG_WIN32) += fd-register.o
+stub-obj-y += memory.o
stub-obj-y += cpus.o
diff --git a/stubs/memory.c b/stubs/memory.c
new file mode 100644
index 0000000..b3b4736
--- /dev/null
+++ b/stubs/memory.c
@@ -0,0 +1,6 @@
+#include "exec/address-spaces.h"
+
+AddressSpace *address_space_find_by_name(const char *name)
+{
+ return NULL;
+}
--
1.8.1.2
next prev parent reply other threads:[~2014-02-03 9:56 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-03 9:44 [Qemu-devel] [PATCH v4 00/22] Steps towards per CPU address-spaces Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 01/22] exec: Make tb_invalidate_phys_addr input an AS Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 02/22] exec: Make iotlb_to_region " Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 03/22] exec: Always initialize MemorySection address spaces Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 04/22] exec: Make memory_region_section_get_iotlb use section AS Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 05/22] memory: Add MemoryListener to typedefs.h Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 06/22] cpu: Add per-cpu address space Edgar E. Iglesias
2014-02-11 19:52 ` Andreas Färber
2014-02-14 5:36 ` Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 07/22] exec: On AS changes, only flush affected CPU TLBs Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 08/22] exec: Make ldl_*_phys input an AddressSpace Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 09/22] exec: Make ldq/ldub_*_phys " Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 10/22] exec: Make lduw_*_phys " Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 11/22] exec: Make stq_*_phys " Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 12/22] exec: Make stl_*_phys " Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 13/22] exec: Make stl_phys_notdirty " Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 14/22] exec: Make stw_*_phys " Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 15/22] exec: Make stb_phys " Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 16/22] exec: Make cpu_physical_memory_write_rom input an AS Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 17/22] exec: Make cpu_memory_rw_debug use the CPUs AS Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 18/22] memory: Add address_space_find_by_name() Edgar E. Iglesias
2014-02-03 9:44 ` Edgar E. Iglesias [this message]
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 20/22] cpu: Add address-space property Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 21/22] petalogix-ml605: Create the CPU with object_new() Edgar E. Iglesias
2014-02-03 9:44 ` [Qemu-devel] [PATCH v4 22/22] petalogix-ml605: Make the LMB visible only to the CPU Edgar E. Iglesias
2014-02-05 18:44 ` [Qemu-devel] [PATCH v4 00/22] Steps towards per CPU address-spaces Peter Maydell
2014-02-06 1:40 ` Edgar E. Iglesias
2014-02-09 13:31 ` Andreas Färber
2014-02-09 14:21 ` Peter Maydell
2014-02-09 22:15 ` Paolo Bonzini
2014-02-10 9:23 ` Peter Maydell
2014-02-10 17:04 ` Paolo Bonzini
2014-02-10 23:10 ` Edgar E. Iglesias
2014-02-10 23:42 ` Peter Maydell
2014-02-10 23:53 ` Edgar E. Iglesias
2014-02-11 21:40 ` Paolo Bonzini
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=1391420690-23745-20-git-send-email-edgar.iglesias@gmail.com \
--to=edgar.iglesias@gmail.com \
--cc=afaerber@suse.de \
--cc=aliguori@amazon.com \
--cc=aurelien@aurel32.net \
--cc=blauwirbel@gmail.com \
--cc=pbonzini@redhat.com \
--cc=pcrost@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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).