diff options
author | Anthony Liguori <aliguori@us.ibm.com> | 2011-12-04 11:08:36 -0600 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2012-01-27 10:50:34 -0600 |
commit | 30fbb9fc7cd73abc32ff71ceb59e9a3be37ac128 (patch) | |
tree | 25aa7ff76f8db648bff269cf169c00d28260ec1f /hw/qdev.h | |
parent | 32fea4025bfb80f2dbc5c3ce415703af28d85f63 (diff) |
qdev: move qdev->info to class
Right now, DeviceInfo acts as the class for qdev. In order to switch to a
proper ObjectClass derivative, we need to ween all of the callers off of
interacting directly with the info pointer.
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/qdev.h')
-rw-r--r-- | hw/qdev.h | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -69,9 +69,12 @@ typedef struct DeviceProperty #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 struct DeviceClass { ObjectClass parent_class; + DeviceInfo *info; } DeviceClass; /* This structure should not be accessed directly. We declare it here @@ -83,7 +86,6 @@ struct DeviceState { enum DevState state; QemuOpts *opts; int hotplugged; - DeviceInfo *info; BusState *parent_bus; int num_gpio_out; qemu_irq *gpio_out; @@ -389,9 +391,19 @@ 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); +DeviceInfo *qdev_get_info(DeviceState *dev); + static inline const char *qdev_fw_name(DeviceState *dev) { - return dev->info->fw_name ? : dev->info->alias ? : dev->info->name; + DeviceInfo *info = qdev_get_info(dev); + + if (info->fw_name) { + return info->fw_name; + } else if (info->alias) { + return info->alias; + } + + return info->name; } char *qdev_get_fw_dev_path(DeviceState *dev); |