qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15
@ 2012-11-15  3:06 Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules Andreas Färber
                   ` (11 more replies)
  0 siblings, 12 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Igor Mammedov, Andreas Färber, anthony, Eduardo Habkost

Hello Anthony,

Here's some steps towards CPU-as-a-device and two new x86 CPU models. Please pull.

I decided to take only a conservative patch selection at this late hour:
Getting the qdev split in avoids having to rebase and review this over and over.
While the CPU as a device would have been helpful as a shared code base for
continued development, it does not provide our users with added value as-is.

Unless you see it as an important feature for v1.3, warranting header file
shuffling during the Hard Freeze, I'll just set up a -next tree for us.

Regards,
Andreas

Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>


The following changes since commit ce34cf72fe508b27a78f83c184142e8d1e6a048a:

  Merge remote-tracking branch 'awilliam/tags/vfio-pci-for-qemu-1.3.0-rc0' into staging (2012-11-14 08:53:40 -0600)

are available in the git repository at:


  git://github.com/afaerber/qemu-cpu.git qom-cpu

for you to fetch changes up to 37507094f350b75c62dc059f998e7185de3ab60a:

  target-i386: Add Haswell CPU model (2012-11-15 03:48:47 +0100)

----------------------------------------------------------------
Andre Przywara (2):
      target-i386/cpu: Name new CPUID bits
      target-i386/cpu: Add new Opteron CPU model

Andreas Färber (1):
      osdep: Move qemu_{open,close}() prototypes

Anthony Liguori (1):
      qdev: Split up header so it can be used in cpu.h

Eduardo Habkost (5):
      qemu-common.h: Comment about usage rules
      qemu-fsdev-dummy.c: Include module.h
      vnc-palette.h: Include <stdbool.h>
      qemu-config.h: Include headers it needs
      target-i386: Add Haswell CPU model

Igor Mammedov (2):
      Move qemu_irq typedef out of qemu-common.h
      qapi-types.h: Don't include qemu-common.h

 fsdev/qemu-fsdev-dummy.c |    1 +
 hw/arm-misc.h            |    1 +
 hw/bt.h                  |    2 +
 hw/devices.h             |    2 +
 hw/irq.h                 |    2 +
 hw/mc146818rtc.c         |    1 +
 hw/omap.h                |    1 +
 hw/qdev-addr.c           |    1 +
 hw/qdev-core.h           |  238 +++++++++++++++++++++++++++++
 hw/qdev-monitor.h        |   16 ++
 hw/qdev-properties.c     |    1 +
 hw/qdev-properties.h     |  130 ++++++++++++++++
 hw/qdev.c                |    1 +
 hw/qdev.h                |  370 +---------------------------------------------
 hw/soc_dma.h             |    1 +
 hw/xen.h                 |    1 +
 osdep.h                  |    3 +
 qemu-common.h            |   14 +-
 qemu-config.h            |    2 +
 scripts/qapi-types.py    |    3 +-
 target-i386/cpu.c        |   73 ++++++++-
 target-i386/cpu.h        |   22 +++
 ui/vnc-palette.h         |    1 +
 23 Dateien geändert, 510 Zeilen hinzugefügt(+), 377 Zeilen entfernt(-)
 create mode 100644 hw/qdev-core.h
 create mode 100644 hw/qdev-monitor.h
 create mode 100644 hw/qdev-properties.h

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 02/11] Move qemu_irq typedef out of qemu-common.h Andreas Färber
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Eduardo Habkost, anthony, Andreas Färber

From: Eduardo Habkost <ehabkost@redhat.com>

Every time we make a tiny change on a header file, we often find
circular header dependency problems. To avoid this nightmare, we need to
stop including qemu-common.h from other headers, and we should gradually
move the declarations from the catch-all qemu-common.h header to their
specific headers.

This simply adds a comment documenting the rules about qemu-common.h,
hoping that people will see it before including qemu-common.h from other
header files, and before adding more declarations to qemu-common.h.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 qemu-common.h |   11 ++++++++++-
 1 Datei geändert, 10 Zeilen hinzugefügt(+), 1 Zeile entfernt(-)

diff --git a/qemu-common.h b/qemu-common.h
index ac9985c..093d119 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -1,5 +1,14 @@
 
-/* Common header file that is included by all of qemu.  */
+/* Common header file that is included by all of QEMU.
+ *
+ * This file is supposed to be included only by .c files. No header file should
+ * depend on qemu-common.h, as this would easily lead to circular header
+ * dependencies.
+ *
+ * If a header file uses a definition from qemu-common.h, that definition
+ * must be moved to a separate header file, and the header that uses it
+ * must include that header.
+ */
 #ifndef QEMU_COMMON_H
 #define QEMU_COMMON_H
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 02/11] Move qemu_irq typedef out of qemu-common.h
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 03/11] qdev: Split up header so it can be used in cpu.h Andreas Färber
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, open list:X86, Eduardo Habkost, Stefano Stabellini,
	anthony, Igor Mammedov, Andreas Färber

From: Igor Mammedov <imammedo@redhat.com>

It's necessary for making CPU child of DEVICE without
causing circular header deps.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
[ehabkost: re-added the typedef to hw/irq.h after rebasing]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 hw/arm-misc.h |    1 +
 hw/bt.h       |    2 ++
 hw/devices.h  |    2 ++
 hw/irq.h      |    2 ++
 hw/omap.h     |    1 +
 hw/soc_dma.h  |    1 +
 hw/xen.h      |    1 +
 qemu-common.h |    1 -
 8 Dateien geändert, 10 Zeilen hinzugefügt(+), 1 Zeile entfernt(-)

diff --git a/hw/arm-misc.h b/hw/arm-misc.h
index adb1665..d129678 100644
--- a/hw/arm-misc.h
+++ b/hw/arm-misc.h
@@ -12,6 +12,7 @@
 #define ARM_MISC_H 1
 
 #include "memory.h"
+#include "hw/irq.h"
 
 /* The CPU is also modeled as an interrupt controller.  */
 #define ARM_PIC_CPU_IRQ 0
diff --git a/hw/bt.h b/hw/bt.h
index a48b8d4..ebf6a37 100644
--- a/hw/bt.h
+++ b/hw/bt.h
@@ -23,6 +23,8 @@
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+#include "hw/irq.h"
+
 /* BD Address */
 typedef struct {
     uint8_t b[6];
diff --git a/hw/devices.h b/hw/devices.h
index 1a55c1e..c60bcab 100644
--- a/hw/devices.h
+++ b/hw/devices.h
@@ -1,6 +1,8 @@
 #ifndef QEMU_DEVICES_H
 #define QEMU_DEVICES_H
 
+#include "hw/irq.h"
+
 /* ??? Not all users of this file can include cpu-common.h.  */
 struct MemoryRegion;
 
diff --git a/hw/irq.h b/hw/irq.h
index e640c10..610e6b7 100644
--- a/hw/irq.h
+++ b/hw/irq.h
@@ -3,6 +3,8 @@
 
 /* Generic IRQ/GPIO pin infrastructure.  */
 
+typedef struct IRQState *qemu_irq;
+
 typedef void (*qemu_irq_handler)(void *opaque, int n, int level);
 
 void qemu_set_irq(qemu_irq irq, int level);
diff --git a/hw/omap.h b/hw/omap.h
index 8bd7c73..2b383ff 100644
--- a/hw/omap.h
+++ b/hw/omap.h
@@ -19,6 +19,7 @@
 #ifndef hw_omap_h
 #include "memory.h"
 # define hw_omap_h		"omap.h"
+#include "hw/irq.h"
 
 # define OMAP_EMIFS_BASE	0x00000000
 # define OMAP2_Q0_BASE		0x00000000
diff --git a/hw/soc_dma.h b/hw/soc_dma.h
index 9340b8f..5948489 100644
--- a/hw/soc_dma.h
+++ b/hw/soc_dma.h
@@ -19,6 +19,7 @@
  */
 
 #include "memory.h"
+#include "hw/irq.h"
 
 struct soc_dma_s;
 struct soc_dma_ch_s;
diff --git a/hw/xen.h b/hw/xen.h
index d14e92d..e3cca7f 100644
--- a/hw/xen.h
+++ b/hw/xen.h
@@ -8,6 +8,7 @@
  */
 #include <inttypes.h>
 
+#include "hw/irq.h"
 #include "qemu-common.h"
 
 /* xen-machine.c */
diff --git a/qemu-common.h b/qemu-common.h
index 093d119..9112e2d 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -292,7 +292,6 @@ typedef struct PCIEPort PCIEPort;
 typedef struct PCIESlot PCIESlot;
 typedef struct MSIMessage MSIMessage;
 typedef struct SerialState SerialState;
-typedef struct IRQState *qemu_irq;
 typedef struct PCMCIACardState PCMCIACardState;
 typedef struct MouseTransformInfo MouseTransformInfo;
 typedef struct uWireSlave uWireSlave;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 03/11] qdev: Split up header so it can be used in cpu.h
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 02/11] Move qemu_irq typedef out of qemu-common.h Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 04/11] qemu-fsdev-dummy.c: Include module.h Andreas Färber
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Eduardo Habkost, anthony, Andreas Färber

From: Anthony Liguori <aliguori@us.ibm.com>

Header file dependency is a frickin' nightmare right now.  cpu.h tends
to get included in our 'include everything' header files but qdev also
needs to include those headers mainly for qdev-properties since it knows
about CharDriverState and friends.

We can solve this for now by splitting out qdev.h along the same lines
that we previously split the C file.  Then cpu.h just needs to include
qdev-core.h.

hw/qdev.h is split into following new headers:
    hw/qdev-core.h
    hw/qdev-properties.h
    hw/qdev-monitor.h

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>

[ehabkost: re-add DEFINE_PROP_PCI_HOST_DEVADDR, that was removed on the
 original patch (by mistake, I guess)]
[ehabkost: kill qdev_prop_set_vlan() declaration]
[ehabkost: moved get_fw_dev_path() comment to the original location
 (I don't know why it was moved)]
[ehabkost: removed qdev_exists() declaration]
[ehabkost: keep using 'QemuOpts' instead of 'struct QemuOpts', as
 qdev-core.h includes qemu-option.h]

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 hw/mc146818rtc.c     |    1 +
 hw/qdev-addr.c       |    1 +
 hw/qdev-core.h       |  238 ++++++++++++++++++++++++++++++++
 hw/qdev-monitor.h    |   16 +++
 hw/qdev-properties.c |    1 +
 hw/qdev-properties.h |  130 ++++++++++++++++++
 hw/qdev.c            |    1 +
 hw/qdev.h            |  370 +-------------------------------------------------
 8 Dateien geändert, 392 Zeilen hinzugefügt(+), 366 Zeilen entfernt(-)
 create mode 100644 hw/qdev-core.h
 create mode 100644 hw/qdev-monitor.h
 create mode 100644 hw/qdev-properties.h

diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c
index 98839f2..7d84ce3 100644
--- a/hw/mc146818rtc.c
+++ b/hw/mc146818rtc.c
@@ -25,6 +25,7 @@
 #include "qemu-timer.h"
 #include "sysemu.h"
 #include "mc146818rtc.h"
+#include "qapi/qapi-visit-core.h"
 
 #ifdef TARGET_I386
 #include "apic.h"
diff --git a/hw/qdev-addr.c b/hw/qdev-addr.c
index de0ba87..ea32c31 100644
--- a/hw/qdev-addr.c
+++ b/hw/qdev-addr.c
@@ -1,6 +1,7 @@
 #include "qdev.h"
 #include "qdev-addr.h"
 #include "hwaddr.h"
+#include "qapi/qapi-visit-core.h"
 
 /* --- target physical address --- */
 
diff --git a/hw/qdev-core.h b/hw/qdev-core.h
new file mode 100644
index 0000000..fce9e22
--- /dev/null
+++ b/hw/qdev-core.h
@@ -0,0 +1,238 @@
+#ifndef QDEV_CORE_H
+#define QDEV_CORE_H
+
+#include "qemu-queue.h"
+#include "qemu-option.h"
+#include "qemu/object.h"
+#include "hw/irq.h"
+#include "error.h"
+
+typedef struct Property Property;
+
+typedef struct PropertyInfo PropertyInfo;
+
+typedef struct CompatProperty CompatProperty;
+
+typedef struct BusState BusState;
+
+typedef struct BusClass BusClass;
+
+enum DevState {
+    DEV_STATE_CREATED = 1,
+    DEV_STATE_INITIALIZED,
+};
+
+enum {
+    DEV_NVECTORS_UNSPECIFIED = -1,
+};
+
+#define TYPE_DEVICE "device"
+#define DEVICE(obj) OBJECT_CHECK(DeviceState, (obj), TYPE_DEVICE)
+#define DEVICE_CLASS(klass) OBJECT_CLASS_CHECK(DeviceClass, (klass), TYPE_DEVICE)
+#define DEVICE_GET_CLASS(obj) OBJECT_GET_CLASS(DeviceClass, (obj), TYPE_DEVICE)
+
+typedef int (*qdev_initfn)(DeviceState *dev);
+typedef int (*qdev_event)(DeviceState *dev);
+typedef void (*qdev_resetfn)(DeviceState *dev);
+
+struct VMStateDescription;
+
+typedef struct DeviceClass {
+    ObjectClass parent_class;
+
+    const char *fw_name;
+    const char *desc;
+    Property *props;
+    int no_user;
+
+    /* callbacks */
+    void (*reset)(DeviceState *dev);
+
+    /* device state */
+    const struct VMStateDescription *vmsd;
+
+    /* Private to qdev / bus.  */
+    qdev_initfn init;
+    qdev_event unplug;
+    qdev_event exit;
+    const char *bus_type;
+} DeviceClass;
+
+/* This structure should not be accessed directly.  We declare it here
+   so that it can be embedded in individual device state structures.  */
+struct DeviceState {
+    Object parent_obj;
+
+    const char *id;
+    enum DevState state;
+    QemuOpts *opts;
+    int hotplugged;
+    BusState *parent_bus;
+    int num_gpio_out;
+    qemu_irq *gpio_out;
+    int num_gpio_in;
+    qemu_irq *gpio_in;
+    QLIST_HEAD(, BusState) child_bus;
+    int num_child_bus;
+    int instance_id_alias;
+    int alias_required_for_version;
+};
+
+#define TYPE_BUS "bus"
+#define BUS(obj) OBJECT_CHECK(BusState, (obj), TYPE_BUS)
+#define BUS_CLASS(klass) OBJECT_CLASS_CHECK(BusClass, (klass), TYPE_BUS)
+#define BUS_GET_CLASS(obj) OBJECT_GET_CLASS(BusClass, (obj), TYPE_BUS)
+
+struct BusClass {
+    ObjectClass parent_class;
+
+    /* FIXME first arg should be BusState */
+    void (*print_dev)(Monitor *mon, DeviceState *dev, int indent);
+    char *(*get_dev_path)(DeviceState *dev);
+    /*
+     * This callback is used to create Open Firmware device path in accordance
+     * with OF spec http://forthworks.com/standards/of1275.pdf. Individual bus
+     * bindings can be found at http://playground.sun.com/1275/bindings/.
+     */
+    char *(*get_fw_dev_path)(DeviceState *dev);
+    int (*reset)(BusState *bus);
+};
+
+typedef struct BusChild {
+    DeviceState *child;
+    int index;
+    QTAILQ_ENTRY(BusChild) sibling;
+} BusChild;
+
+/**
+ * BusState:
+ * @qom_allocated: Indicates whether the object was allocated by QOM.
+ * @glib_allocated: Indicates whether the object was initialized in-place
+ * yet is expected to be freed with g_free().
+ */
+struct BusState {
+    Object obj;
+    DeviceState *parent;
+    const char *name;
+    int allow_hotplug;
+    bool qom_allocated;
+    bool glib_allocated;
+    int max_index;
+    QTAILQ_HEAD(ChildrenHead, BusChild) children;
+    QLIST_ENTRY(BusState) sibling;
+};
+
+struct Property {
+    const char   *name;
+    PropertyInfo *info;
+    int          offset;
+    uint8_t      bitnr;
+    uint8_t      qtype;
+    int64_t      defval;
+};
+
+struct PropertyInfo {
+    const char *name;
+    const char *legacy_name;
+    const char **enum_table;
+    int (*parse)(DeviceState *dev, Property *prop, const char *str);
+    int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
+    ObjectPropertyAccessor *get;
+    ObjectPropertyAccessor *set;
+    ObjectPropertyRelease *release;
+};
+
+typedef struct GlobalProperty {
+    const char *driver;
+    const char *property;
+    const char *value;
+    QTAILQ_ENTRY(GlobalProperty) next;
+} GlobalProperty;
+
+/*** Board API.  This should go away once we have a machine config file.  ***/
+
+DeviceState *qdev_create(BusState *bus, const char *name);
+DeviceState *qdev_try_create(BusState *bus, const char *name);
+int qdev_init(DeviceState *dev) QEMU_WARN_UNUSED_RESULT;
+void qdev_init_nofail(DeviceState *dev);
+void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
+                                 int required_for_version);
+void qdev_unplug(DeviceState *dev, Error **errp);
+void qdev_free(DeviceState *dev);
+int qdev_simple_unplug_cb(DeviceState *dev);
+void qdev_machine_creation_done(void);
+bool qdev_machine_modified(void);
+
+qemu_irq qdev_get_gpio_in(DeviceState *dev, int n);
+void qdev_connect_gpio_out(DeviceState *dev, int n, qemu_irq pin);
+
+BusState *qdev_get_child_bus(DeviceState *dev, const char *name);
+
+/*** Device API.  ***/
+
+/* Register device properties.  */
+/* GPIO inputs also double as IRQ sinks.  */
+void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n);
+void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n);
+
+BusState *qdev_get_parent_bus(DeviceState *dev);
+
+/*** BUS API. ***/
+
+DeviceState *qdev_find_recursive(BusState *bus, const char *id);
+
+/* Returns 0 to walk children, > 0 to skip walk, < 0 to terminate walk. */
+typedef int (qbus_walkerfn)(BusState *bus, void *opaque);
+typedef int (qdev_walkerfn)(DeviceState *dev, void *opaque);
+
+void qbus_create_inplace(BusState *bus, const char *typename,
+                         DeviceState *parent, const char *name);
+BusState *qbus_create(const char *typename, DeviceState *parent, const char *name);
+/* Returns > 0 if either devfn or busfn skip walk somewhere in cursion,
+ *         < 0 if either devfn or busfn terminate walk somewhere in cursion,
+ *           0 otherwise. */
+int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn,
+                       qbus_walkerfn *busfn, void *opaque);
+int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn,
+                       qbus_walkerfn *busfn, void *opaque);
+void qdev_reset_all(DeviceState *dev);
+void qbus_reset_all_fn(void *opaque);
+
+void qbus_free(BusState *bus);
+
+#define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev)
+
+/* This should go away once we get rid of the NULL bus hack */
+BusState *sysbus_get_default(void);
+
+char *qdev_get_fw_dev_path(DeviceState *dev);
+
+/**
+ * @qdev_machine_init
+ *
+ * Initialize platform devices before machine init.  This is a hack until full
+ * support for composition is added.
+ */
+void qdev_machine_init(void);
+
+/**
+ * @device_reset
+ *
+ * Reset a single device (by calling the reset method).
+ */
+void device_reset(DeviceState *dev);
+
+const struct VMStateDescription *qdev_get_vmsd(DeviceState *dev);
+
+const char *qdev_fw_name(DeviceState *dev);
+
+Object *qdev_get_machine(void);
+
+/* FIXME: make this a link<> */
+void qdev_set_parent_bus(DeviceState *dev, BusState *bus);
+
+extern int qdev_hotplug;
+
+char *qdev_get_dev_path(DeviceState *dev);
+
+#endif
diff --git a/hw/qdev-monitor.h b/hw/qdev-monitor.h
new file mode 100644
index 0000000..220ceba
--- /dev/null
+++ b/hw/qdev-monitor.h
@@ -0,0 +1,16 @@
+#ifndef QEMU_QDEV_MONITOR_H
+#define QEMU_QDEV_MONITOR_H
+
+#include "qdev-core.h"
+#include "monitor.h"
+
+/*** monitor commands ***/
+
+void do_info_qtree(Monitor *mon);
+void do_info_qdm(Monitor *mon);
+int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
+int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
+int qdev_device_help(QemuOpts *opts);
+DeviceState *qdev_device_add(QemuOpts *opts);
+
+#endif
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index 8aca0d4..81d901c 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -4,6 +4,7 @@
 #include "blockdev.h"
 #include "hw/block-common.h"
 #include "net/hub.h"
+#include "qapi/qapi-visit-core.h"
 
 void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
 {
diff --git a/hw/qdev-properties.h b/hw/qdev-properties.h
new file mode 100644
index 0000000..5b046ab
--- /dev/null
+++ b/hw/qdev-properties.h
@@ -0,0 +1,130 @@
+#ifndef QEMU_QDEV_PROPERTIES_H
+#define QEMU_QDEV_PROPERTIES_H
+
+#include "qdev-core.h"
+
+/*** qdev-properties.c ***/
+
+extern PropertyInfo qdev_prop_bit;
+extern PropertyInfo qdev_prop_uint8;
+extern PropertyInfo qdev_prop_uint16;
+extern PropertyInfo qdev_prop_uint32;
+extern PropertyInfo qdev_prop_int32;
+extern PropertyInfo qdev_prop_uint64;
+extern PropertyInfo qdev_prop_hex8;
+extern PropertyInfo qdev_prop_hex32;
+extern PropertyInfo qdev_prop_hex64;
+extern PropertyInfo qdev_prop_string;
+extern PropertyInfo qdev_prop_chr;
+extern PropertyInfo qdev_prop_ptr;
+extern PropertyInfo qdev_prop_macaddr;
+extern PropertyInfo qdev_prop_losttickpolicy;
+extern PropertyInfo qdev_prop_bios_chs_trans;
+extern PropertyInfo qdev_prop_drive;
+extern PropertyInfo qdev_prop_netdev;
+extern PropertyInfo qdev_prop_vlan;
+extern PropertyInfo qdev_prop_pci_devfn;
+extern PropertyInfo qdev_prop_blocksize;
+extern PropertyInfo qdev_prop_pci_host_devaddr;
+
+#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
+        .name      = (_name),                                    \
+        .info      = &(_prop),                                   \
+        .offset    = offsetof(_state, _field)                    \
+            + type_check(_type,typeof_field(_state, _field)),    \
+        }
+#define DEFINE_PROP_DEFAULT(_name, _state, _field, _defval, _prop, _type) { \
+        .name      = (_name),                                           \
+        .info      = &(_prop),                                          \
+        .offset    = offsetof(_state, _field)                           \
+            + type_check(_type,typeof_field(_state, _field)),           \
+        .qtype     = QTYPE_QINT,                                        \
+        .defval    = (_type)_defval,                                    \
+        }
+#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) {  \
+        .name      = (_name),                                    \
+        .info      = &(qdev_prop_bit),                           \
+        .bitnr    = (_bit),                                      \
+        .offset    = offsetof(_state, _field)                    \
+            + type_check(uint32_t,typeof_field(_state, _field)), \
+        .qtype     = QTYPE_QBOOL,                                \
+        .defval    = (bool)_defval,                              \
+        }
+
+#define DEFINE_PROP_UINT8(_n, _s, _f, _d)                       \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t)
+#define DEFINE_PROP_UINT16(_n, _s, _f, _d)                      \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint16, uint16_t)
+#define DEFINE_PROP_UINT32(_n, _s, _f, _d)                      \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint32, uint32_t)
+#define DEFINE_PROP_INT32(_n, _s, _f, _d)                      \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_int32, int32_t)
+#define DEFINE_PROP_UINT64(_n, _s, _f, _d)                      \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t)
+#define DEFINE_PROP_HEX8(_n, _s, _f, _d)                       \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex8, uint8_t)
+#define DEFINE_PROP_HEX32(_n, _s, _f, _d)                       \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex32, uint32_t)
+#define DEFINE_PROP_HEX64(_n, _s, _f, _d)                       \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex64, uint64_t)
+#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d)                   \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
+
+#define DEFINE_PROP_PTR(_n, _s, _f)             \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*)
+#define DEFINE_PROP_CHR(_n, _s, _f)             \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*)
+#define DEFINE_PROP_STRING(_n, _s, _f)             \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
+#define DEFINE_PROP_NETDEV(_n, _s, _f)             \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NetClientState*)
+#define DEFINE_PROP_VLAN(_n, _s, _f)             \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, NetClientState*)
+#define DEFINE_PROP_DRIVE(_n, _s, _f) \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *)
+#define DEFINE_PROP_MACADDR(_n, _s, _f)         \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
+#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
+                        LostTickPolicy)
+#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int)
+#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f, _d) \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_blocksize, uint16_t)
+#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress)
+
+#define DEFINE_PROP_END_OF_LIST()               \
+    {}
+
+/* Set properties between creation and init.  */
+void *qdev_get_prop_ptr(DeviceState *dev, Property *prop);
+int qdev_prop_parse(DeviceState *dev, const char *name, const char *value);
+void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value);
+void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value);
+void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value);
+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_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;
+void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value);
+void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
+void qdev_prop_set_enum(DeviceState *dev, const char *name, int value);
+/* FIXME: Remove opaque pointer properties.  */
+void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value);
+
+void qdev_prop_register_global_list(GlobalProperty *props);
+void qdev_prop_set_globals(DeviceState *dev);
+void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
+                                    Property *prop, const char *value);
+
+/**
+ * @qdev_property_add_static - add a @Property to a device referencing a
+ * field in a struct.
+ */
+void qdev_property_add_static(DeviceState *dev, Property *prop, Error **errp);
+
+#endif
diff --git a/hw/qdev.c b/hw/qdev.c
index 9b9aba3..7ddcd24 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -29,6 +29,7 @@
 #include "qdev.h"
 #include "sysemu.h"
 #include "error.h"
+#include "qapi/qapi-visit-core.h"
 
 int qdev_hotplug = 0;
 static bool qdev_hot_added = false;
diff --git a/hw/qdev.h b/hw/qdev.h
index c6ac636..365b8d6 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -1,371 +1,9 @@
 #ifndef QDEV_H
 #define QDEV_H
 
-#include "hw.h"
-#include "qemu-queue.h"
-#include "qemu-char.h"
-#include "qemu-option.h"
-#include "qapi/qapi-visit-core.h"
-#include "qemu/object.h"
-#include "error.h"
-
-typedef struct Property Property;
-
-typedef struct PropertyInfo PropertyInfo;
-
-typedef struct CompatProperty CompatProperty;
-
-typedef struct BusState BusState;
-
-typedef struct BusClass BusClass;
-
-enum DevState {
-    DEV_STATE_CREATED = 1,
-    DEV_STATE_INITIALIZED,
-};
-
-enum {
-    DEV_NVECTORS_UNSPECIFIED = -1,
-};
-
-#define TYPE_DEVICE "device"
-#define DEVICE(obj) OBJECT_CHECK(DeviceState, (obj), TYPE_DEVICE)
-#define DEVICE_CLASS(klass) OBJECT_CLASS_CHECK(DeviceClass, (klass), TYPE_DEVICE)
-#define DEVICE_GET_CLASS(obj) OBJECT_GET_CLASS(DeviceClass, (obj), TYPE_DEVICE)
-
-typedef int (*qdev_initfn)(DeviceState *dev);
-typedef int (*qdev_event)(DeviceState *dev);
-typedef void (*qdev_resetfn)(DeviceState *dev);
-
-typedef struct DeviceClass {
-    ObjectClass parent_class;
-
-    const char *fw_name;
-    const char *desc;
-    Property *props;
-    int no_user;
-
-    /* callbacks */
-    void (*reset)(DeviceState *dev);
-
-    /* device state */
-    const VMStateDescription *vmsd;
-
-    /* Private to qdev / bus.  */
-    qdev_initfn init;
-    qdev_event unplug;
-    qdev_event exit;
-    const char *bus_type;
-} DeviceClass;
-
-/* This structure should not be accessed directly.  We declare it here
-   so that it can be embedded in individual device state structures.  */
-struct DeviceState {
-    Object parent_obj;
-
-    const char *id;
-    enum DevState state;
-    QemuOpts *opts;
-    int hotplugged;
-    BusState *parent_bus;
-    int num_gpio_out;
-    qemu_irq *gpio_out;
-    int num_gpio_in;
-    qemu_irq *gpio_in;
-    QLIST_HEAD(, BusState) child_bus;
-    int num_child_bus;
-    int instance_id_alias;
-    int alias_required_for_version;
-};
-
-#define TYPE_BUS "bus"
-#define BUS(obj) OBJECT_CHECK(BusState, (obj), TYPE_BUS)
-#define BUS_CLASS(klass) OBJECT_CLASS_CHECK(BusClass, (klass), TYPE_BUS)
-#define BUS_GET_CLASS(obj) OBJECT_GET_CLASS(BusClass, (obj), TYPE_BUS)
-
-struct BusClass {
-    ObjectClass parent_class;
-
-    /* FIXME first arg should be BusState */
-    void (*print_dev)(Monitor *mon, DeviceState *dev, int indent);
-    char *(*get_dev_path)(DeviceState *dev);
-    /*
-     * This callback is used to create Open Firmware device path in accordance
-     * with OF spec http://forthworks.com/standards/of1275.pdf. Individual bus
-     * bindings can be found at http://playground.sun.com/1275/bindings/.
-     */
-    char *(*get_fw_dev_path)(DeviceState *dev);
-    int (*reset)(BusState *bus);
-};
-
-typedef struct BusChild {
-    DeviceState *child;
-    int index;
-    QTAILQ_ENTRY(BusChild) sibling;
-} BusChild;
-
-/**
- * BusState:
- * @qom_allocated: Indicates whether the object was allocated by QOM.
- * @glib_allocated: Indicates whether the object was initialized in-place
- * yet is expected to be freed with g_free().
- */
-struct BusState {
-    Object obj;
-    DeviceState *parent;
-    const char *name;
-    int allow_hotplug;
-    bool qom_allocated;
-    bool glib_allocated;
-    int max_index;
-    QTAILQ_HEAD(ChildrenHead, BusChild) children;
-    QLIST_ENTRY(BusState) sibling;
-};
-
-struct Property {
-    const char   *name;
-    PropertyInfo *info;
-    int          offset;
-    uint8_t      bitnr;
-    uint8_t      qtype;
-    int64_t      defval;
-};
-
-struct PropertyInfo {
-    const char *name;
-    const char *legacy_name;
-    const char **enum_table;
-    int (*parse)(DeviceState *dev, Property *prop, const char *str);
-    int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
-    ObjectPropertyAccessor *get;
-    ObjectPropertyAccessor *set;
-    ObjectPropertyRelease *release;
-};
-
-typedef struct GlobalProperty {
-    const char *driver;
-    const char *property;
-    const char *value;
-    QTAILQ_ENTRY(GlobalProperty) next;
-} GlobalProperty;
-
-/*** Board API.  This should go away once we have a machine config file.  ***/
-
-DeviceState *qdev_create(BusState *bus, const char *name);
-DeviceState *qdev_try_create(BusState *bus, const char *name);
-int qdev_device_help(QemuOpts *opts);
-DeviceState *qdev_device_add(QemuOpts *opts);
-int qdev_init(DeviceState *dev) QEMU_WARN_UNUSED_RESULT;
-void qdev_init_nofail(DeviceState *dev);
-void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
-                                 int required_for_version);
-void qdev_unplug(DeviceState *dev, Error **errp);
-void qdev_free(DeviceState *dev);
-int qdev_simple_unplug_cb(DeviceState *dev);
-void qdev_machine_creation_done(void);
-bool qdev_machine_modified(void);
-
-qemu_irq qdev_get_gpio_in(DeviceState *dev, int n);
-void qdev_connect_gpio_out(DeviceState *dev, int n, qemu_irq pin);
-
-BusState *qdev_get_child_bus(DeviceState *dev, const char *name);
-
-/*** Device API.  ***/
-
-/* Register device properties.  */
-/* GPIO inputs also double as IRQ sinks.  */
-void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n);
-void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n);
-
-BusState *qdev_get_parent_bus(DeviceState *dev);
-
-/*** BUS API. ***/
-
-DeviceState *qdev_find_recursive(BusState *bus, const char *id);
-
-/* Returns 0 to walk children, > 0 to skip walk, < 0 to terminate walk. */
-typedef int (qbus_walkerfn)(BusState *bus, void *opaque);
-typedef int (qdev_walkerfn)(DeviceState *dev, void *opaque);
-
-void qbus_create_inplace(BusState *bus, const char *typename,
-                         DeviceState *parent, const char *name);
-BusState *qbus_create(const char *typename, DeviceState *parent, const char *name);
-/* Returns > 0 if either devfn or busfn skip walk somewhere in cursion,
- *         < 0 if either devfn or busfn terminate walk somewhere in cursion,
- *           0 otherwise. */
-int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn,
-                       qbus_walkerfn *busfn, void *opaque);
-int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn,
-                       qbus_walkerfn *busfn, void *opaque);
-void qdev_reset_all(DeviceState *dev);
-void qbus_reset_all_fn(void *opaque);
-
-void qbus_free(BusState *bus);
-
-#define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev)
-
-/* This should go away once we get rid of the NULL bus hack */
-BusState *sysbus_get_default(void);
-
-/*** monitor commands ***/
-
-void do_info_qtree(Monitor *mon);
-void do_info_qdm(Monitor *mon);
-int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
-int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
-
-/*** qdev-properties.c ***/
-
-extern PropertyInfo qdev_prop_bit;
-extern PropertyInfo qdev_prop_uint8;
-extern PropertyInfo qdev_prop_uint16;
-extern PropertyInfo qdev_prop_uint32;
-extern PropertyInfo qdev_prop_int32;
-extern PropertyInfo qdev_prop_uint64;
-extern PropertyInfo qdev_prop_hex8;
-extern PropertyInfo qdev_prop_hex32;
-extern PropertyInfo qdev_prop_hex64;
-extern PropertyInfo qdev_prop_string;
-extern PropertyInfo qdev_prop_chr;
-extern PropertyInfo qdev_prop_ptr;
-extern PropertyInfo qdev_prop_macaddr;
-extern PropertyInfo qdev_prop_losttickpolicy;
-extern PropertyInfo qdev_prop_bios_chs_trans;
-extern PropertyInfo qdev_prop_drive;
-extern PropertyInfo qdev_prop_netdev;
-extern PropertyInfo qdev_prop_vlan;
-extern PropertyInfo qdev_prop_pci_devfn;
-extern PropertyInfo qdev_prop_blocksize;
-extern PropertyInfo qdev_prop_pci_host_devaddr;
-
-#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
-        .name      = (_name),                                    \
-        .info      = &(_prop),                                   \
-        .offset    = offsetof(_state, _field)                    \
-            + type_check(_type,typeof_field(_state, _field)),    \
-        }
-#define DEFINE_PROP_DEFAULT(_name, _state, _field, _defval, _prop, _type) { \
-        .name      = (_name),                                           \
-        .info      = &(_prop),                                          \
-        .offset    = offsetof(_state, _field)                           \
-            + type_check(_type,typeof_field(_state, _field)),           \
-        .qtype     = QTYPE_QINT,                                        \
-        .defval    = (_type)_defval,                                    \
-        }
-#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) {  \
-        .name      = (_name),                                    \
-        .info      = &(qdev_prop_bit),                           \
-        .bitnr    = (_bit),                                      \
-        .offset    = offsetof(_state, _field)                    \
-            + type_check(uint32_t,typeof_field(_state, _field)), \
-        .qtype     = QTYPE_QBOOL,                                \
-        .defval    = (bool)_defval,                              \
-        }
-
-#define DEFINE_PROP_UINT8(_n, _s, _f, _d)                       \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t)
-#define DEFINE_PROP_UINT16(_n, _s, _f, _d)                      \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint16, uint16_t)
-#define DEFINE_PROP_UINT32(_n, _s, _f, _d)                      \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint32, uint32_t)
-#define DEFINE_PROP_INT32(_n, _s, _f, _d)                      \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_int32, int32_t)
-#define DEFINE_PROP_UINT64(_n, _s, _f, _d)                      \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t)
-#define DEFINE_PROP_HEX8(_n, _s, _f, _d)                       \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex8, uint8_t)
-#define DEFINE_PROP_HEX32(_n, _s, _f, _d)                       \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex32, uint32_t)
-#define DEFINE_PROP_HEX64(_n, _s, _f, _d)                       \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex64, uint64_t)
-#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d)                   \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
-
-#define DEFINE_PROP_PTR(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*)
-#define DEFINE_PROP_CHR(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*)
-#define DEFINE_PROP_STRING(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
-#define DEFINE_PROP_NETDEV(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NetClientState*)
-#define DEFINE_PROP_VLAN(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, NetClientState*)
-#define DEFINE_PROP_DRIVE(_n, _s, _f) \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *)
-#define DEFINE_PROP_MACADDR(_n, _s, _f)         \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
-#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
-                        LostTickPolicy)
-#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int)
-#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f, _d) \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_blocksize, uint16_t)
-#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress)
-
-#define DEFINE_PROP_END_OF_LIST()               \
-    {}
-
-/* Set properties between creation and init.  */
-void *qdev_get_prop_ptr(DeviceState *dev, Property *prop);
-int qdev_prop_parse(DeviceState *dev, const char *name, const char *value);
-void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value);
-void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value);
-void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value);
-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_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;
-void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value);
-void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
-void qdev_prop_set_enum(DeviceState *dev, const char *name, int value);
-/* FIXME: Remove opaque pointer properties.  */
-void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value);
-
-void qdev_prop_register_global_list(GlobalProperty *props);
-void qdev_prop_set_globals(DeviceState *dev);
-void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
-                                    Property *prop, const char *value);
-
-char *qdev_get_fw_dev_path(DeviceState *dev);
-
-/**
- * @qdev_property_add_static - add a @Property to a device referencing a
- * field in a struct.
- */
-void qdev_property_add_static(DeviceState *dev, Property *prop, Error **errp);
-
-/**
- * @qdev_machine_init
- *
- * Initialize platform devices before machine init.  This is a hack until full
- * support for composition is added.
- */
-void qdev_machine_init(void);
-
-/**
- * @device_reset
- *
- * Reset a single device (by calling the reset method).
- */
-void device_reset(DeviceState *dev);
-
-const VMStateDescription *qdev_get_vmsd(DeviceState *dev);
-
-const char *qdev_fw_name(DeviceState *dev);
-
-Object *qdev_get_machine(void);
-
-/* FIXME: make this a link<> */
-void qdev_set_parent_bus(DeviceState *dev, BusState *bus);
-
-extern int qdev_hotplug;
-
-char *qdev_get_dev_path(DeviceState *dev);
+#include "hw/hw.h"
+#include "qdev-core.h"
+#include "qdev-properties.h"
+#include "qdev-monitor.h"
 
 #endif
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 04/11] qemu-fsdev-dummy.c: Include module.h
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (2 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 03/11] qdev: Split up header so it can be used in cpu.h Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 05/11] vnc-palette.h: Include <stdbool.h> Andreas Färber
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel
  Cc: Aneesh Kumar K.V, Eduardo Habkost, anthony, Andreas Färber

From: Eduardo Habkost <ehabkost@redhat.com>

module.h is where machine_init() is defined, but qemu-fsdev-dummy.c
doesn't include it.

The header is probably being included by accident because some other
headers are including qemu-common.h, but those headers should eventually
stop including qemu-common.h.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 fsdev/qemu-fsdev-dummy.c |    1 +
 1 Datei geändert, 1 Zeile hinzugefügt(+)

diff --git a/fsdev/qemu-fsdev-dummy.c b/fsdev/qemu-fsdev-dummy.c
index 4e700dd..300f275 100644
--- a/fsdev/qemu-fsdev-dummy.c
+++ b/fsdev/qemu-fsdev-dummy.c
@@ -14,6 +14,7 @@
 #include <string.h>
 #include "qemu-fsdev.h"
 #include "qemu-config.h"
+#include "module.h"
 
 int qemu_fsdev_add(QemuOpts *opts)
 {
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 05/11] vnc-palette.h: Include <stdbool.h>
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (3 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 04/11] qemu-fsdev-dummy.c: Include module.h Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 06/11] qemu-config.h: Include headers it needs Andreas Färber
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori, Eduardo Habkost, anthony, Andreas Färber

From: Eduardo Habkost <ehabkost@redhat.com>

<stdbool.h> is needed for the 'bool' type, used in the header.

The header is probably being included by accident because some other
headers are including qemu-common.h, but those headers should eventually
stop including qemu-common.h.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 ui/vnc-palette.h |    1 +
 1 Datei geändert, 1 Zeile hinzugefügt(+)

diff --git a/ui/vnc-palette.h b/ui/vnc-palette.h
index 3260885..b82dc5d 100644
--- a/ui/vnc-palette.h
+++ b/ui/vnc-palette.h
@@ -32,6 +32,7 @@
 #include "qlist.h"
 #include "qemu-queue.h"
 #include <stdint.h>
+#include <stdbool.h>
 
 #define VNC_PALETTE_HASH_SIZE 256
 #define VNC_PALETTE_MAX_SIZE  256
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 06/11] qemu-config.h: Include headers it needs
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (4 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 05/11] vnc-palette.h: Include <stdbool.h> Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 07/11] osdep: Move qemu_{open, close}() prototypes Andreas Färber
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Eduardo Habkost, anthony, Andreas Färber

From: Eduardo Habkost <ehabkost@redhat.com>

Include:
- <stdio.h> for FILE
- qemu-option.h for QemuOptsList

Some of those headers were probably being included by accident because
some other headers were including qemu-common.h, but those headers
should eventually stop including qemu-common.h.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 qemu-config.h |    2 ++
 1 Datei geändert, 2 Zeilen hinzugefügt(+)

diff --git a/qemu-config.h b/qemu-config.h
index 5557562..812c4c5 100644
--- a/qemu-config.h
+++ b/qemu-config.h
@@ -1,6 +1,8 @@
 #ifndef QEMU_CONFIG_H
 #define QEMU_CONFIG_H
 
+#include <stdio.h>
+#include "qemu-option.h"
 #include "error.h"
 
 extern QemuOptsList qemu_fsdev_opts;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 07/11] osdep: Move qemu_{open, close}() prototypes
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (5 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 06/11] qemu-config.h: Include headers it needs Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 08/11] qapi-types.h: Don't include qemu-common.h Andreas Färber
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Andreas Färber, anthony

They are implemented in osdep.c, so keep the prototypes in osdep.h.

Suggested-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
Acked-by: Eduardo Habkost <ehabkost@redhat.com>
---
 osdep.h       |    3 +++
 qemu-common.h |    2 --
 2 Dateien geändert, 3 Zeilen hinzugefügt(+), 2 Zeilen entfernt(-)

diff --git a/osdep.h b/osdep.h
index 585e2c1..87d3b9c 100644
--- a/osdep.h
+++ b/osdep.h
@@ -136,6 +136,9 @@ void qemu_vfree(void *ptr);
 
 int qemu_madvise(void *addr, size_t len, int advice);
 
+int qemu_open(const char *name, int flags, ...);
+int qemu_close(int fd);
+
 #if defined(__HAIKU__) && defined(__i386__)
 #define FMT_pid "%ld"
 #elif defined(WIN64)
diff --git a/qemu-common.h b/qemu-common.h
index 9112e2d..cef264c 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -217,8 +217,6 @@ const char *path(const char *pathname);
 
 void *qemu_oom_check(void *ptr);
 
-int qemu_open(const char *name, int flags, ...);
-int qemu_close(int fd);
 ssize_t qemu_write_full(int fd, const void *buf, size_t count)
     QEMU_WARN_UNUSED_RESULT;
 ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags)
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 08/11] qapi-types.h: Don't include qemu-common.h
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (6 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 07/11] osdep: Move qemu_{open, close}() prototypes Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits Andreas Färber
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Igor Mammedov, Eduardo Habkost, anthony, Andreas Färber

From: Igor Mammedov <imammedo@redhat.com>

Needed to prevent build breakage when CPUState becomes a child of
DeviceState.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
[ehabkost: include <stdbool.h> too]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 scripts/qapi-types.py |    3 ++-
 1 Datei geändert, 2 Zeilen hinzugefügt(+), 1 Zeile entfernt(-)

diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py
index 1b84834..6bc2391 100644
--- a/scripts/qapi-types.py
+++ b/scripts/qapi-types.py
@@ -273,7 +273,8 @@ fdecl.write(mcgen('''
 #ifndef %(guard)s
 #define %(guard)s
 
-#include "qemu-common.h"
+#include <stdbool.h>
+#include <stdint.h>
 
 ''',
                   guard=guardname(h_file)))
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (7 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 08/11] qapi-types.h: Don't include qemu-common.h Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-26 15:30   ` Igor Mammedov
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 10/11] target-i386/cpu: Add new Opteron CPU model Andreas Färber
                   ` (2 subsequent siblings)
  11 siblings, 1 reply; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel
  Cc: Boris Ostrovsky, Andre Przywara, Eduardo Habkost, anthony,
	Andreas Färber

From: Andre Przywara <osp@andrep.de>

Update QEMU's knowledge of CPUID bit names. This allows to
enable/disable those new features on QEMU's command line when
using KVM and prepares future feature enablement in QEMU.

This adds F16C, RDRAND, LWP, TBM, TopoExt, PerfCtr_Core, PerfCtr_NB,
FSGSBASE, BMI1, AVX2, BMI2, ERMS, PCID, InvPCID, RTM, RDSeed and ADX.

Sources where the AMD BKDG for Family 15h/Model 10h, Intel Software
Developer Manual, and the Linux kernel for the leaf 7 bits.

Signed-off-by: Andre Przywara <osp@andrep.de>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@amd.com>
[ehabkost: added CPUID_EXT_PCID]
[ehabkost: edited commit message]
[ehabkost: rebased against latest qemu.git master]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 target-i386/cpu.c |   12 ++++++------
 target-i386/cpu.h |   22 ++++++++++++++++++++++
 2 Dateien geändert, 28 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)

diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index e1db639..f896e0c 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -66,7 +66,7 @@ static const char *ext_feature_name[] = {
     NULL, "pcid", "dca", "sse4.1|sse4_1",
     "sse4.2|sse4_2", "x2apic", "movbe", "popcnt",
     "tsc-deadline", "aes", "xsave", "osxsave",
-    "avx", NULL, NULL, "hypervisor",
+    "avx", "f16c", "rdrand", "hypervisor",
 };
 /* Feature names that are already defined on feature_name[] but are set on
  * CPUID[8000_0001].EDX on AMD CPUs don't have their names on
@@ -87,10 +87,10 @@ static const char *ext3_feature_name[] = {
     "lahf_lm" /* AMD LahfSahf */, "cmp_legacy", "svm", "extapic" /* AMD ExtApicSpace */,
     "cr8legacy" /* AMD AltMovCr8 */, "abm", "sse4a", "misalignsse",
     "3dnowprefetch", "osvw", "ibs", "xop",
-    "skinit", "wdt", NULL, NULL,
-    "fma4", NULL, "cvt16", "nodeid_msr",
-    NULL, NULL, NULL, NULL,
-    NULL, NULL, NULL, NULL,
+    "skinit", "wdt", NULL, "lwp",
+    "fma4", "tce", NULL, "nodeid_msr",
+    NULL, "tbm", "topoext", "perfctr_core",
+    "perfctr_nb", NULL, NULL, NULL,
     NULL, NULL, NULL, NULL,
 };
 
@@ -119,7 +119,7 @@ static const char *svm_feature_name[] = {
 static const char *cpuid_7_0_ebx_feature_name[] = {
     "fsgsbase", NULL, NULL, "bmi1", "hle", "avx2", NULL, "smep",
     "bmi2", "erms", "invpcid", "rtm", NULL, NULL, NULL, NULL,
-    NULL, NULL, NULL, NULL, "smap", NULL, NULL, NULL,
+    NULL, NULL, "rdseed", "adx", "smap", NULL, NULL, NULL,
     NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 };
 
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index cdc59dc..90ef1ff 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -403,9 +403,11 @@
 #define CPUID_EXT_TM2      (1 << 8)
 #define CPUID_EXT_SSSE3    (1 << 9)
 #define CPUID_EXT_CID      (1 << 10)
+#define CPUID_EXT_FMA      (1 << 12)
 #define CPUID_EXT_CX16     (1 << 13)
 #define CPUID_EXT_XTPR     (1 << 14)
 #define CPUID_EXT_PDCM     (1 << 15)
+#define CPUID_EXT_PCID     (1 << 17)
 #define CPUID_EXT_DCA      (1 << 18)
 #define CPUID_EXT_SSE41    (1 << 19)
 #define CPUID_EXT_SSE42    (1 << 20)
@@ -417,6 +419,8 @@
 #define CPUID_EXT_XSAVE    (1 << 26)
 #define CPUID_EXT_OSXSAVE  (1 << 27)
 #define CPUID_EXT_AVX      (1 << 28)
+#define CPUID_EXT_F16C     (1 << 29)
+#define CPUID_EXT_RDRAND   (1 << 30)
 #define CPUID_EXT_HYPERVISOR  (1 << 31)
 
 #define CPUID_EXT2_FPU     (1 << 0)
@@ -472,7 +476,15 @@
 #define CPUID_EXT3_IBS     (1 << 10)
 #define CPUID_EXT3_XOP     (1 << 11)
 #define CPUID_EXT3_SKINIT  (1 << 12)
+#define CPUID_EXT3_WDT     (1 << 13)
+#define CPUID_EXT3_LWP     (1 << 15)
 #define CPUID_EXT3_FMA4    (1 << 16)
+#define CPUID_EXT3_TCE     (1 << 17)
+#define CPUID_EXT3_NODEID  (1 << 19)
+#define CPUID_EXT3_TBM     (1 << 21)
+#define CPUID_EXT3_TOPOEXT (1 << 22)
+#define CPUID_EXT3_PERFCORE (1 << 23)
+#define CPUID_EXT3_PERFNB  (1 << 24)
 
 #define CPUID_SVM_NPT          (1 << 0)
 #define CPUID_SVM_LBRV         (1 << 1)
@@ -485,7 +497,17 @@
 #define CPUID_SVM_PAUSEFILTER  (1 << 10)
 #define CPUID_SVM_PFTHRESHOLD  (1 << 12)
 
+#define CPUID_7_0_EBX_FSGSBASE (1 << 0)
+#define CPUID_7_0_EBX_BMI1     (1 << 3)
+#define CPUID_7_0_EBX_HLE      (1 << 4)
+#define CPUID_7_0_EBX_AVX2     (1 << 5)
 #define CPUID_7_0_EBX_SMEP     (1 << 7)
+#define CPUID_7_0_EBX_BMI2     (1 << 8)
+#define CPUID_7_0_EBX_ERMS     (1 << 9)
+#define CPUID_7_0_EBX_INVPCID  (1 << 10)
+#define CPUID_7_0_EBX_RTM      (1 << 11)
+#define CPUID_7_0_EBX_RDSEED   (1 << 18)
+#define CPUID_7_0_EBX_ADX      (1 << 19)
 #define CPUID_7_0_EBX_SMAP     (1 << 20)
 
 #define CPUID_VENDOR_INTEL_1 0x756e6547 /* "Genu" */
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 10/11] target-i386/cpu: Add new Opteron CPU model
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (8 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 11/11] target-i386: Add Haswell " Andreas Färber
  2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel
  Cc: Boris Ostrovsky, Andre Przywara, Eduardo Habkost, anthony,
	Andreas Färber

From: Andre Przywara <osp@andrep.de>

Add a new base CPU model called Opteron_G5 to model the latest
Opteron CPUs. This increases the model value and model numbers and
adds TBM, F16C and FMA over the latest G4 model.

Signed-off-by: Andre Przywara <osp@andrep.de>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@amd.com>
[ehabkost: edited commit message]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 target-i386/cpu.c |   32 ++++++++++++++++++++++++++++++++
 1 Datei geändert, 32 Zeilen hinzugefügt(+)

diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index f896e0c..c3aff4f 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -756,6 +756,38 @@ static x86_def_t builtin_x86_defs[] = {
         .xlevel = 0x8000001A,
         .model_id = "AMD Opteron 62xx class CPU",
     },
+    {
+        .name = "Opteron_G5",
+        .level = 0xd,
+        .vendor1 = CPUID_VENDOR_AMD_1,
+        .vendor2 = CPUID_VENDOR_AMD_2,
+        .vendor3 = CPUID_VENDOR_AMD_3,
+        .family = 21,
+        .model = 2,
+        .stepping = 0,
+        .features = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
+             CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
+             CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 |
+             CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
+             CPUID_DE | CPUID_FP87,
+        .ext_features = CPUID_EXT_F16C | CPUID_EXT_AVX | CPUID_EXT_XSAVE |
+             CPUID_EXT_AES | CPUID_EXT_POPCNT | CPUID_EXT_SSE42 |
+             CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_FMA |
+             CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3,
+        .ext2_features = CPUID_EXT2_LM | CPUID_EXT2_RDTSCP |
+             CPUID_EXT2_PDPE1GB | CPUID_EXT2_FXSR | CPUID_EXT2_MMX |
+             CPUID_EXT2_NX | CPUID_EXT2_PSE36 | CPUID_EXT2_PAT |
+             CPUID_EXT2_CMOV | CPUID_EXT2_MCA | CPUID_EXT2_PGE |
+             CPUID_EXT2_MTRR | CPUID_EXT2_SYSCALL | CPUID_EXT2_APIC |
+             CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR |
+             CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU,
+        .ext3_features = CPUID_EXT3_TBM | CPUID_EXT3_FMA4 | CPUID_EXT3_XOP |
+             CPUID_EXT3_3DNOWPREFETCH | CPUID_EXT3_MISALIGNSSE |
+             CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | CPUID_EXT3_SVM |
+             CPUID_EXT3_LAHF_LM,
+        .xlevel = 0x8000001A,
+        .model_id = "AMD Opteron 63xx class CPU",
+    },
 };
 
 #ifdef CONFIG_KVM
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH 11/11] target-i386: Add Haswell CPU model
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (9 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 10/11] target-i386/cpu: Add new Opteron CPU model Andreas Färber
@ 2012-11-15  3:06 ` Andreas Färber
  2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
  11 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-15  3:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: Eduardo Habkost, anthony, Andreas Färber

From: Eduardo Habkost <ehabkost@redhat.com>

Features added to the model, in relation to SandyBridge:

fma       CPUID[1].ECX[12]
pcid      CPUID[1].ECX[17]
movbe     CPUID[1].ECX[22]
fsgsbase  CPUID[EAX=7,ECX=0].EBX[0]
bmi1      CPUID[EAX=7,ECX=0].EBX[3]
hle       CPUID[EAX=7,ECX=0].EBX[4]
avx2      CPUID[EAX=7,ECX=0].EBX[5]
smep      CPUID[EAX=7,ECX=0].EBX[7]
bmi2      CPUID[EAX=7,ECX=0].EBX[8]
erms      CPUID[EAX=7,ECX=0].EBX[9]
invpcid   CPUID[EAX=7,ECX=0].EBX[10]
rtm       CPUID[EAX=7,ECX=0].EBX[11]

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 target-i386/cpu.c |   29 +++++++++++++++++++++++++++++
 1 Datei geändert, 29 Zeilen hinzugefügt(+)

diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index c3aff4f..64c3491 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -647,6 +647,35 @@ static x86_def_t builtin_x86_defs[] = {
         .model_id = "Intel Xeon E312xx (Sandy Bridge)",
     },
     {
+        .name = "Haswell",
+        .level = 0xd,
+        .vendor1 = CPUID_VENDOR_INTEL_1,
+        .vendor2 = CPUID_VENDOR_INTEL_2,
+        .vendor3 = CPUID_VENDOR_INTEL_3,
+        .family = 6,
+        .model = 60,
+        .stepping = 1,
+        .features = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX |
+             CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA |
+             CPUID_PGE | CPUID_MTRR | CPUID_APIC | CPUID_CX8 |
+             CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE |
+             CPUID_DE | CPUID_FP87,
+        .ext_features = CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES |
+             CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 |
+             CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 |
+             CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 |
+             CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE |
+             CPUID_EXT_PCID,
+        .ext2_features = CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL,
+        .ext3_features = CPUID_EXT3_LAHF_LM,
+        .cpuid_7_0_ebx_features = CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 |
+            CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP |
+            CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID |
+            CPUID_7_0_EBX_RTM,
+        .xlevel = 0x8000000A,
+        .model_id = "Intel Core Processor (Haswell)",
+    },
+    {
         .name = "Opteron_G1",
         .level = 5,
         .vendor1 = CPUID_VENDOR_AMD_1,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15
  2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
                   ` (10 preceding siblings ...)
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 11/11] target-i386: Add Haswell " Andreas Färber
@ 2012-11-21 17:43 ` Andreas Färber
  2012-11-21 18:58   ` Eduardo Habkost
  2012-11-21 19:11   ` Igor Mammedov
  11 siblings, 2 replies; 17+ messages in thread
From: Andreas Färber @ 2012-11-21 17:43 UTC (permalink / raw)
  To: Igor Mammedov, Eduardo Habkost; +Cc: qemu-devel, anthony

Am 15.11.2012 04:06, schrieb Andreas Färber:
> The following changes since commit ce34cf72fe508b27a78f83c184142e8d1e6a048a:
> 
>   Merge remote-tracking branch 'awilliam/tags/vfio-pci-for-qemu-1.3.0-rc0' into staging (2012-11-14 08:53:40 -0600)
> 
> are available in the git repository at:
> 
> 
>   git://github.com/afaerber/qemu-cpu.git qom-cpu
> 
> for you to fetch changes up to 37507094f350b75c62dc059f998e7185de3ab60a:
> 
>   target-i386: Add Haswell CPU model (2012-11-15 03:48:47 +0100)
> 
> ----------------------------------------------------------------
> Andre Przywara (2):
>       target-i386/cpu: Name new CPUID bits
>       target-i386/cpu: Add new Opteron CPU model
> 
> Andreas Färber (1):
>       osdep: Move qemu_{open,close}() prototypes
> 
> Anthony Liguori (1):
>       qdev: Split up header so it can be used in cpu.h
> 
> Eduardo Habkost (5):
>       qemu-common.h: Comment about usage rules
>       qemu-fsdev-dummy.c: Include module.h
>       vnc-palette.h: Include <stdbool.h>
>       qemu-config.h: Include headers it needs
>       target-i386: Add Haswell CPU model
> 
> Igor Mammedov (2):
>       Move qemu_irq typedef out of qemu-common.h
>       qapi-types.h: Don't include qemu-common.h

Eduardo, Igor,

This batch has been pulled into v1.3.0-rc0. Can you please rebase and
let me know how you would like to proceed? Igor had tried to avoid a new
qemu-types.h, which iirc didn't completely work out?

Currently I still have five patches queued on qom-cpu-dev branch:
https://github.com/afaerber/qemu-cpu/commits/qom-cpu-dev

If you're available, I'd be interested in getting this staged during the
freeze, so that I can continue review of the follow-up series on a
common basis.

Thanks,
Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15
  2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
@ 2012-11-21 18:58   ` Eduardo Habkost
  2012-11-21 19:11   ` Igor Mammedov
  1 sibling, 0 replies; 17+ messages in thread
From: Eduardo Habkost @ 2012-11-21 18:58 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Igor Mammedov, qemu-devel, anthony

On Wed, Nov 21, 2012 at 06:43:21PM +0100, Andreas Färber wrote:
> Am 15.11.2012 04:06, schrieb Andreas Färber:
> > The following changes since commit ce34cf72fe508b27a78f83c184142e8d1e6a048a:
> > 
> >   Merge remote-tracking branch 'awilliam/tags/vfio-pci-for-qemu-1.3.0-rc0' into staging (2012-11-14 08:53:40 -0600)
> > 
> > are available in the git repository at:
> > 
> > 
> >   git://github.com/afaerber/qemu-cpu.git qom-cpu
> > 
> > for you to fetch changes up to 37507094f350b75c62dc059f998e7185de3ab60a:
> > 
> >   target-i386: Add Haswell CPU model (2012-11-15 03:48:47 +0100)
> > 
> > ----------------------------------------------------------------
> > Andre Przywara (2):
> >       target-i386/cpu: Name new CPUID bits
> >       target-i386/cpu: Add new Opteron CPU model
> > 
> > Andreas Färber (1):
> >       osdep: Move qemu_{open,close}() prototypes
> > 
> > Anthony Liguori (1):
> >       qdev: Split up header so it can be used in cpu.h
> > 
> > Eduardo Habkost (5):
> >       qemu-common.h: Comment about usage rules
> >       qemu-fsdev-dummy.c: Include module.h
> >       vnc-palette.h: Include <stdbool.h>
> >       qemu-config.h: Include headers it needs
> >       target-i386: Add Haswell CPU model
> > 
> > Igor Mammedov (2):
> >       Move qemu_irq typedef out of qemu-common.h
> >       qapi-types.h: Don't include qemu-common.h
> 
> Eduardo, Igor,
> 
> This batch has been pulled into v1.3.0-rc0. Can you please rebase and
> let me know how you would like to proceed?

I just rebased my CPU-DeviceState branch locally. I can send a new
series with the result, if you think it is useful.

I am already expecting the rest of the CPU-DeviceState series to miss
1.3. If you think some of the remaining patches still have a chance of
getting in (especially the qdev-split work), please let me know, so I
can send a rebased version as soon as possible.

Now, talking about post-1.3: I would really like to get some feedback on
"[PATCH 00/17] target-i386: CPU init cleanup for CPU
classes/properties", to see if you think it's a good starting point for
both the CPU classes and the CPU properties work.



> Igor had tried to avoid a new
> qemu-types.h, which iirc didn't completely work out?

Igor was trying to do that, maybe he managed to make qemu-types.h
unnecessary for the 'Monitor' typedef. But we have other 49 typedefs on
qemu-types.h (that were previously on qemu-common.h) that would have to
be moved somewhere else, as well.  :-)

I would love to kill qemu-types.h if possible, but I think we may find
cases where it will be impossible to have a separate header for the
typedefs, if (for example) we have two headers that don't really depend
on each other, but use the typedefs for structs declared on each
other[1].


> 
> Currently I still have five patches queued on qom-cpu-dev branch:
> https://github.com/afaerber/qemu-cpu/commits/qom-cpu-dev
> 
> If you're available, I'd be interested in getting this staged during the
> freeze, so that I can continue review of the follow-up series on a
> common basis.

Are you talking about just the 5 patches on qom-cpu-dev? I am absolutely
OK with including them.

> 
> Thanks,
> Andreas
> 
> -- 
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

[1] I mean, I won't be surprised if we find cases like:

foo.h:
  struct Foo { ... };
  struct OtherFooType { ... };
  void foo_func(Foo *f, OtherFooType *ff, Bar *b);

bar.h:
  struct Bar { ... };
  struct OtherBarType { ... };
  void bar_func(Bar *b, OtherBarType *bb, Foo *f);

-- 
Eduardo

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15
  2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
  2012-11-21 18:58   ` Eduardo Habkost
@ 2012-11-21 19:11   ` Igor Mammedov
  1 sibling, 0 replies; 17+ messages in thread
From: Igor Mammedov @ 2012-11-21 19:11 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Eduardo Habkost, anthony, qemu-devel

On Wed, 21 Nov 2012 18:43:21 +0100
Andreas Färber <afaerber@suse.de> wrote:

> Am 15.11.2012 04:06, schrieb Andreas Färber:
> > The following changes since commit ce34cf72fe508b27a78f83c184142e8d1e6a048a:
> > 
> >   Merge remote-tracking branch 'awilliam/tags/vfio-pci-for-qemu-1.3.0-rc0' into staging (2012-11-14 08:53:40 -0600)
> > 
> > are available in the git repository at:
> > 
> > 
> >   git://github.com/afaerber/qemu-cpu.git qom-cpu
> > 
> > for you to fetch changes up to 37507094f350b75c62dc059f998e7185de3ab60a:
> > 
> >   target-i386: Add Haswell CPU model (2012-11-15 03:48:47 +0100)
> > 
> > ----------------------------------------------------------------
> > Andre Przywara (2):
> >       target-i386/cpu: Name new CPUID bits
> >       target-i386/cpu: Add new Opteron CPU model
> > 
> > Andreas Färber (1):
> >       osdep: Move qemu_{open,close}() prototypes
> > 
> > Anthony Liguori (1):
> >       qdev: Split up header so it can be used in cpu.h
> > 
> > Eduardo Habkost (5):
> >       qemu-common.h: Comment about usage rules
> >       qemu-fsdev-dummy.c: Include module.h
> >       vnc-palette.h: Include <stdbool.h>
> >       qemu-config.h: Include headers it needs
> >       target-i386: Add Haswell CPU model
> > 
> > Igor Mammedov (2):
> >       Move qemu_irq typedef out of qemu-common.h
> >       qapi-types.h: Don't include qemu-common.h
> 
> Eduardo, Igor,
> 
> This batch has been pulled into v1.3.0-rc0. Can you please rebase and
> let me know how you would like to proceed? Igor had tried to avoid a new
> qemu-types.h, which iirc didn't completely work out?
I'd go with Eduardo's qemu-types.h for now, so not to stall CPU as device
& depended series on headers cleanup.

PS:
monitor.h proved to be an other header with circular dependencies. Currently
I have only a single huge blob that moves Monitor typedef into monitor.h and
fixes all dependencies, however I hadn't time to split it into 2 sane series,
yet. It could be posted later during 1.4 dev cycle, when it's ready.

> 
> Currently I still have five patches queued on qom-cpu-dev branch:
> https://github.com/afaerber/qemu-cpu/commits/qom-cpu-dev
> 
> If you're available, I'd be interested in getting this staged during the
> freeze, so that I can continue review of the follow-up series on a
> common basis.
> 
> Thanks,
> Andreas
> 
> -- 
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg


-- 
Regards,
  Igor

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits
  2012-11-15  3:06 ` [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits Andreas Färber
@ 2012-11-26 15:30   ` Igor Mammedov
  2012-11-26 15:44     ` Eduardo Habkost
  0 siblings, 1 reply; 17+ messages in thread
From: Igor Mammedov @ 2012-11-26 15:30 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Boris Ostrovsky, Andre Przywara, qemu-devel, anthony,
	Eduardo Habkost

Eduardo,

While doing rebase of x86 cpu properties on top of the current master, I've
stumbled on possibly removed by mistake cpuid feature, pls see inline

On Thu, 15 Nov 2012 04:06:45 +0100
Andreas Färber <afaerber@suse.de> wrote:

...
> @@ -87,10 +87,10 @@ static const char *ext3_feature_name[] = {
>      "lahf_lm" /* AMD LahfSahf */, "cmp_legacy", "svm", "extapic" /* AMD ExtApicSpace */,
>      "cr8legacy" /* AMD AltMovCr8 */, "abm", "sse4a", "misalignsse",
>      "3dnowprefetch", "osvw", "ibs", "xop",
> -    "skinit", "wdt", NULL, NULL,
> -    "fma4", NULL, "cvt16", "nodeid_msr",
                      ^^^^
> -    NULL, NULL, NULL, NULL,
> -    NULL, NULL, NULL, NULL,
> +    "skinit", "wdt", NULL, "lwp",
> +    "fma4", "tce", NULL, "nodeid_msr",
                      ^^^^  should we keep cvt16 here ?
> +    NULL, "tbm", "topoext", "perfctr_core",
> +    "perfctr_nb", NULL, NULL, NULL,
>      NULL, NULL, NULL, NULL,
>  };
...

it's committed as: c8acc380: target-i386/cpu: Name new CPUID bits

-- 
Regards,
  Igor

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits
  2012-11-26 15:30   ` Igor Mammedov
@ 2012-11-26 15:44     ` Eduardo Habkost
  0 siblings, 0 replies; 17+ messages in thread
From: Eduardo Habkost @ 2012-11-26 15:44 UTC (permalink / raw)
  To: Igor Mammedov
  Cc: Boris Ostrovsky, Andre Przywara, Andreas Färber, anthony,
	qemu-devel

On Mon, Nov 26, 2012 at 04:30:41PM +0100, Igor Mammedov wrote:
> Eduardo,
> 
> While doing rebase of x86 cpu properties on top of the current master, I've
> stumbled on possibly removed by mistake cpuid feature, pls see inline
> 
> On Thu, 15 Nov 2012 04:06:45 +0100
> Andreas Färber <afaerber@suse.de> wrote:
> 
> ...
> > @@ -87,10 +87,10 @@ static const char *ext3_feature_name[] = {
> >      "lahf_lm" /* AMD LahfSahf */, "cmp_legacy", "svm", "extapic" /* AMD ExtApicSpace */,
> >      "cr8legacy" /* AMD AltMovCr8 */, "abm", "sse4a", "misalignsse",
> >      "3dnowprefetch", "osvw", "ibs", "xop",
> > -    "skinit", "wdt", NULL, NULL,
> > -    "fma4", NULL, "cvt16", "nodeid_msr",
>                       ^^^^
> > -    NULL, NULL, NULL, NULL,
> > -    NULL, NULL, NULL, NULL,
> > +    "skinit", "wdt", NULL, "lwp",
> > +    "fma4", "tce", NULL, "nodeid_msr",
>                       ^^^^  should we keep cvt16 here ?
> > +    NULL, "tbm", "topoext", "perfctr_core",
> > +    "perfctr_nb", NULL, NULL, NULL,
> >      NULL, NULL, NULL, NULL,
> >  };
> ...
> 
> it's committed as: c8acc380: target-i386/cpu: Name new CPUID bits

It was on purpose. See
<http://article.gmane.org/gmane.comp.emulators.qemu/176694>.

This should have been documented on the commit message, but I didn't
notice that the patch from Boris that I resubmitted in November was the
same one where I asked for a commit message change in October.

-- 
Eduardo

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-11-26 15:43 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-15  3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 02/11] Move qemu_irq typedef out of qemu-common.h Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 03/11] qdev: Split up header so it can be used in cpu.h Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 04/11] qemu-fsdev-dummy.c: Include module.h Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 05/11] vnc-palette.h: Include <stdbool.h> Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 06/11] qemu-config.h: Include headers it needs Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 07/11] osdep: Move qemu_{open, close}() prototypes Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 08/11] qapi-types.h: Don't include qemu-common.h Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits Andreas Färber
2012-11-26 15:30   ` Igor Mammedov
2012-11-26 15:44     ` Eduardo Habkost
2012-11-15  3:06 ` [Qemu-devel] [PATCH 10/11] target-i386/cpu: Add new Opteron CPU model Andreas Färber
2012-11-15  3:06 ` [Qemu-devel] [PATCH 11/11] target-i386: Add Haswell " Andreas Färber
2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber
2012-11-21 18:58   ` Eduardo Habkost
2012-11-21 19:11   ` Igor Mammedov

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).