On Tue, Dec 4, 2012 at 7:01 PM, Eduardo Habkost <ehabk...@redhat.com> wrote: > On Tue, Dec 04, 2012 at 06:55:17PM +0000, Blue Swirl wrote: >> On Tue, Dec 4, 2012 at 1:19 PM, Eduardo Habkost <ehabk...@redhat.com> wrote: >> > This separates the qdev properties code in two parts: >> > - qdev-properties.c, that contains most of the qdev properties code; >> > - qdev-properties-system.c for code specific for qemu-system-*, >> > containing: >> > - Property types: drive, chr, netdev, vlan, that depend on code that >> > won't be included on *-user >> > - qemu_add_globals(), that depends on qemu-config.o. >> > >> > This change should help on two things: >> > - Allowing DeviceState to be used by *-user without pulling >> > dependencies that are specific for qemu-system-*; >> > - Writing qdev unit tests without pulling too many dependencies. >> > >> > The copyright/license header for the new file is directly copied from >> > qdev-properties.c. >> > >> > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> >> > --- >> > Detailed changelog: >> > >> > Changes v1 (ehabkost) -> v2 (imammedo): >> > - keep qdev_get_child_bus() in hw/qdev.c >> > - put qdev_set_nic_properties() in hw/qdev-properties-system.c >> > >> > Changes v2 -> v3 (ehabkost): >> > - updated the qdev_init_gpio_in() code on qdev-system.c to current >> > version >> > >> > Changes v3 -> v4 (ehabkost): >> > - Added copyright/license information to qdev-properties-system.c >> > (based on copyright/license of qdev-properties.c) >> > - Whitespace change at the end of qdev-properties.c >> > - Don't create qdev-system.c, now we can keep the qdev.c code as-is >> > as the qdev.c dependencies were reduced >> > - Rewrite patch description >> > >> > Changes v4 -> v5 (ehabkost): >> > - Remove large copyright header and instead just point to the original >> > file it was based on >> > >> > Changes v5 -> v6 (ehabkost): >> > - Removed inter-SoB line changelog from commit message >> > --- >> > hw/Makefile.objs | 1 + >> > hw/qdev-properties-system.c | 352 >> > ++++++++++++++++++++++++++++++++++++++++++++ >> > hw/qdev-properties.c | 321 +--------------------------------------- >> > hw/qdev-properties.h | 1 + >> > hw/qdev.c | 13 -- >> > 5 files changed, 355 insertions(+), 333 deletions(-) >> > create mode 100644 hw/qdev-properties-system.c >> > >> > diff --git a/hw/Makefile.objs b/hw/Makefile.objs >> > index d581d8d..96a8365 100644 >> > --- a/hw/Makefile.objs >> > +++ b/hw/Makefile.objs >> > @@ -185,6 +185,7 @@ common-obj-y += bt.o bt-l2cap.o bt-sdp.o bt-hci.o >> > bt-hid.o >> > common-obj-y += bt-hci-csr.o >> > common-obj-y += msmouse.o ps2.o >> > common-obj-y += qdev.o qdev-properties.o qdev-monitor.o >> > +common-obj-y += qdev-properties-system.o >> > common-obj-$(CONFIG_BRLAPI) += baum.o >> > >> > # xen backend driver support >> > diff --git a/hw/qdev-properties-system.c b/hw/qdev-properties-system.c >> > new file mode 100644 >> > index 0000000..9a7e0b3 >> > --- /dev/null >> > +++ b/hw/qdev-properties-system.c >> > @@ -0,0 +1,352 @@ >> > +/* >> > + * qdev property parsing and global properties >> > + * (parts specific for qemu-system-*) >> > + * >> > + * This file is based on code from hw/qdev-properties.c from >> > + * commit 4e68f7a0819f179c2ff90a60611806c789911cc2, >> > + * Copyright (c) Gerd Hoffmann <kra...@redhat.com> and other contributors. >> > + * >> > + * This work is licensed under the terms of the GNU GPL, version 2 or >> > later. >> > + * See the COPYING file in the top-level directory. >> > + */ >> > + >> > +#include "net.h" >> > +#include "qdev.h" >> > +#include "qerror.h" >> > +#include "blockdev.h" >> > +#include "hw/block-common.h" >> > +#include "net/hub.h" >> > +#include "qapi/qapi-visit-core.h" >> > + >> > +static void get_pointer(Object *obj, Visitor *v, Property *prop, >> > + const char *(*print)(void *ptr), >> > + const char *name, Error **errp) >> > +{ >> > + DeviceState *dev = DEVICE(obj); >> > + void **ptr = qdev_get_prop_ptr(dev, prop); >> > + char *p; >> > + >> > + p = (char *) (*ptr ? print(*ptr) : ""); >> > + visit_type_str(v, &p, name, errp); >> > +} >> > + >> > +static void set_pointer(Object *obj, Visitor *v, Property *prop, >> > + int (*parse)(DeviceState *dev, const char *str, >> > + void **ptr), >> > + const char *name, Error **errp) >> > +{ >> > + DeviceState *dev = DEVICE(obj); >> > + Error *local_err = NULL; >> > + void **ptr = qdev_get_prop_ptr(dev, prop); >> > + char *str; >> > + int ret; >> > + >> > + if (dev->state != DEV_STATE_CREATED) { >> > + error_set(errp, QERR_PERMISSION_DENIED); >> > + return; >> > + } >> > + >> > + visit_type_str(v, &str, name, &local_err); >> > + if (local_err) { >> > + error_propagate(errp, local_err); >> > + return; >> > + } >> > + if (!*str) { >> > + g_free(str); >> > + *ptr = NULL; >> > + return; >> > + } >> > + ret = parse(dev, str, ptr); >> > + error_set_from_qdev_prop_error(errp, ret, dev, prop, str); >> > + g_free(str); >> > +} >> > + >> > +/* --- drive --- */ >> > + >> > +static int parse_drive(DeviceState *dev, const char *str, void **ptr) >> > +{ >> > + BlockDriverState *bs; >> > + >> > + bs = bdrv_find(str); >> > + if (bs == NULL) >> >> Please add braces, use checkpatch.pl. >> >> > + return -ENOENT; >> > + if (bdrv_attach_dev(bs, dev) < 0) >> >> Also here. > > > This is pure code movement, and I won't introduce changes in the code > while it is being moved to not make patch review harder.
That's OK. > If you want to send coding style patches for that code after it is > moved, be my guest. But that would not be OK because git blame information would be lost, otherwise we could just reformat everything. Please fix the code first as the first patch, then move. > > >> >> > + return -EEXIST; >> > + *ptr = bs; >> > + return 0; >> > +} >> > + >> > +static void release_drive(Object *obj, const char *name, void *opaque) >> > +{ >> > + DeviceState *dev = DEVICE(obj); >> > + Property *prop = opaque; >> > + BlockDriverState **ptr = qdev_get_prop_ptr(dev, prop); >> > + >> > + if (*ptr) { >> > + bdrv_detach_dev(*ptr, dev); >> > + blockdev_auto_del(*ptr); >> > + } >> > +} >> > + >> > +static const char *print_drive(void *ptr) >> > +{ >> > + return bdrv_get_device_name(ptr); >> > +} >> > + >> > +static void get_drive(Object *obj, Visitor *v, void *opaque, >> > + const char *name, Error **errp) >> > +{ >> > + get_pointer(obj, v, opaque, print_drive, name, errp); >> > +} >> > + >> > +static void set_drive(Object *obj, Visitor *v, void *opaque, >> > + const char *name, Error **errp) >> > +{ >> > + set_pointer(obj, v, opaque, parse_drive, name, errp); >> > +} >> > + >> > +PropertyInfo qdev_prop_drive = { >> > + .name = "drive", >> > + .get = get_drive, >> > + .set = set_drive, >> > + .release = release_drive, >> > +}; >> > + >> > +/* --- character device --- */ >> > + >> > +static int parse_chr(DeviceState *dev, const char *str, void **ptr) >> > +{ >> > + CharDriverState *chr = qemu_chr_find(str); >> > + if (chr == NULL) { >> > + return -ENOENT; >> > + } >> > + if (chr->avail_connections < 1) { >> > + return -EEXIST; >> > + } >> > + *ptr = chr; >> > + --chr->avail_connections; >> > + return 0; >> > +} >> > + >> > +static void release_chr(Object *obj, const char *name, void *opaque) >> > +{ >> > + DeviceState *dev = DEVICE(obj); >> > + Property *prop = opaque; >> > + CharDriverState **ptr = qdev_get_prop_ptr(dev, prop); >> > + >> > + if (*ptr) { >> > + qemu_chr_add_handlers(*ptr, NULL, NULL, NULL, NULL); >> > + } >> > +} >> > + >> > + >> > +static const char *print_chr(void *ptr) >> > +{ >> > + CharDriverState *chr = ptr; >> > + >> > + return chr->label ? chr->label : ""; >> > +} >> > + >> > +static void get_chr(Object *obj, Visitor *v, void *opaque, >> > + const char *name, Error **errp) >> > +{ >> > + get_pointer(obj, v, opaque, print_chr, name, errp); >> > +} >> > + >> > +static void set_chr(Object *obj, Visitor *v, void *opaque, >> > + const char *name, Error **errp) >> > +{ >> > + set_pointer(obj, v, opaque, parse_chr, name, errp); >> > +} >> > + >> > +PropertyInfo qdev_prop_chr = { >> > + .name = "chr", >> > + .get = get_chr, >> > + .set = set_chr, >> > + .release = release_chr, >> > +}; >> > + >> > +/* --- netdev device --- */ >> > + >> > +static int parse_netdev(DeviceState *dev, const char *str, void **ptr) >> > +{ >> > + NetClientState *netdev = qemu_find_netdev(str); >> > + >> > + if (netdev == NULL) { >> > + return -ENOENT; >> > + } >> > + if (netdev->peer) { >> > + return -EEXIST; >> > + } >> > + *ptr = netdev; >> > + return 0; >> > +} >> > + >> > +static const char *print_netdev(void *ptr) >> > +{ >> > + NetClientState *netdev = ptr; >> > + >> > + return netdev->name ? netdev->name : ""; >> > +} >> > + >> > +static void get_netdev(Object *obj, Visitor *v, void *opaque, >> > + const char *name, Error **errp) >> > +{ >> > + get_pointer(obj, v, opaque, print_netdev, name, errp); >> > +} >> > + >> > +static void set_netdev(Object *obj, Visitor *v, void *opaque, >> > + const char *name, Error **errp) >> > +{ >> > + set_pointer(obj, v, opaque, parse_netdev, name, errp); >> > +} >> > + >> > +PropertyInfo qdev_prop_netdev = { >> > + .name = "netdev", >> > + .get = get_netdev, >> > + .set = set_netdev, >> > +}; >> > + >> > +void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd) >> > +{ >> > + qdev_prop_set_macaddr(dev, "mac", nd->macaddr.a); >> > + if (nd->netdev) >> > + qdev_prop_set_netdev(dev, "netdev", nd->netdev); >> >> Ditto. >> >> > + if (nd->nvectors != DEV_NVECTORS_UNSPECIFIED && >> > + object_property_find(OBJECT(dev), "vectors", NULL)) { >> > + qdev_prop_set_uint32(dev, "vectors", nd->nvectors); >> > + } >> > + nd->instantiated = 1; >> > +} >> > + >> > +/* --- vlan --- */ >> > + >> > +static int print_vlan(DeviceState *dev, Property *prop, char *dest, >> > size_t len) >> > +{ >> > + NetClientState **ptr = qdev_get_prop_ptr(dev, prop); >> > + >> > + if (*ptr) { >> > + int id; >> > + if (!net_hub_id_for_client(*ptr, &id)) { >> > + return snprintf(dest, len, "%d", id); >> > + } >> > + } >> > + >> > + return snprintf(dest, len, "<null>"); >> > +} >> > + >> > +static void get_vlan(Object *obj, Visitor *v, void *opaque, >> > + const char *name, Error **errp) >> > +{ >> > + DeviceState *dev = DEVICE(obj); >> > + Property *prop = opaque; >> > + NetClientState **ptr = qdev_get_prop_ptr(dev, prop); >> > + int32_t id = -1; >> > + >> > + if (*ptr) { >> > + int hub_id; >> > + if (!net_hub_id_for_client(*ptr, &hub_id)) { >> > + id = hub_id; >> > + } >> > + } >> > + >> > + visit_type_int32(v, &id, name, errp); >> > +} >> > + >> > +static void set_vlan(Object *obj, Visitor *v, void *opaque, >> > + const char *name, Error **errp) >> > +{ >> > + DeviceState *dev = DEVICE(obj); >> > + Property *prop = opaque; >> > + NetClientState **ptr = qdev_get_prop_ptr(dev, prop); >> > + Error *local_err = NULL; >> > + int32_t id; >> > + NetClientState *hubport; >> > + >> > + if (dev->state != DEV_STATE_CREATED) { >> > + error_set(errp, QERR_PERMISSION_DENIED); >> > + return; >> > + } >> > + >> > + visit_type_int32(v, &id, name, &local_err); >> > + if (local_err) { >> > + error_propagate(errp, local_err); >> > + return; >> > + } >> > + if (id == -1) { >> > + *ptr = NULL; >> > + return; >> > + } >> > + >> > + hubport = net_hub_port_find(id); >> > + if (!hubport) { >> > + error_set(errp, QERR_INVALID_PARAMETER_VALUE, >> > + name, prop->info->name); >> > + return; >> > + } >> > + *ptr = hubport; >> > +} >> > + >> > +PropertyInfo qdev_prop_vlan = { >> > + .name = "vlan", >> > + .print = print_vlan, >> > + .get = get_vlan, >> > + .set = set_vlan, >> > +}; >> > + >> > + >> > +int qdev_prop_set_drive(DeviceState *dev, const char *name, >> > BlockDriverState *value) >> > +{ >> > + Error *errp = NULL; >> > + const char *bdrv_name = value ? bdrv_get_device_name(value) : ""; >> > + object_property_set_str(OBJECT(dev), bdrv_name, >> > + name, &errp); >> > + if (errp) { >> > + qerror_report_err(errp); >> > + error_free(errp); >> > + return -1; >> > + } >> > + return 0; >> > +} >> > + >> > +void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, >> > BlockDriverState *value) >> > +{ >> > + if (qdev_prop_set_drive(dev, name, value) < 0) { >> > + exit(1); >> > + } >> > +} >> > + >> > +void qdev_prop_set_chr(DeviceState *dev, const char *name, >> > CharDriverState *value) >> > +{ >> > + Error *errp = NULL; >> > + assert(!value || value->label); >> > + object_property_set_str(OBJECT(dev), >> > + value ? value->label : "", name, &errp); >> > + assert_no_error(errp); >> > +} >> > + >> > +void qdev_prop_set_netdev(DeviceState *dev, const char *name, >> > NetClientState *value) >> > +{ >> > + Error *errp = NULL; >> > + assert(!value || value->name); >> > + object_property_set_str(OBJECT(dev), >> > + value ? value->name : "", name, &errp); >> > + assert_no_error(errp); >> > +} >> > + >> > +static int qdev_add_one_global(QemuOpts *opts, void *opaque) >> > +{ >> > + GlobalProperty *g; >> > + >> > + g = g_malloc0(sizeof(*g)); >> > + g->driver = qemu_opt_get(opts, "driver"); >> > + g->property = qemu_opt_get(opts, "property"); >> > + g->value = qemu_opt_get(opts, "value"); >> > + qdev_prop_register_global(g); >> > + return 0; >> > +} >> > + >> > +void qemu_add_globals(void) >> > +{ >> > + qemu_opts_foreach(qemu_find_opts("global"), qdev_add_one_global, >> > NULL, 0); >> > +} >> > diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c >> > index 81d901c..9ec04be 100644 >> > --- a/hw/qdev-properties.c >> > +++ b/hw/qdev-properties.c >> > @@ -13,49 +13,6 @@ void *qdev_get_prop_ptr(DeviceState *dev, Property >> > *prop) >> > return ptr; >> > } >> > >> > -static void get_pointer(Object *obj, Visitor *v, Property *prop, >> > - const char *(*print)(void *ptr), >> > - const char *name, Error **errp) >> > -{ >> > - DeviceState *dev = DEVICE(obj); >> > - void **ptr = qdev_get_prop_ptr(dev, prop); >> > - char *p; >> > - >> > - p = (char *) (*ptr ? print(*ptr) : ""); >> > - visit_type_str(v, &p, name, errp); >> > -} >> > - >> > -static void set_pointer(Object *obj, Visitor *v, Property *prop, >> > - int (*parse)(DeviceState *dev, const char *str, >> > - void **ptr), >> > - const char *name, Error **errp) >> > -{ >> > - DeviceState *dev = DEVICE(obj); >> > - Error *local_err = NULL; >> > - void **ptr = qdev_get_prop_ptr(dev, prop); >> > - char *str; >> > - int ret; >> > - >> > - if (dev->state != DEV_STATE_CREATED) { >> > - error_set(errp, QERR_PERMISSION_DENIED); >> > - return; >> > - } >> > - >> > - visit_type_str(v, &str, name, &local_err); >> > - if (local_err) { >> > - error_propagate(errp, local_err); >> > - return; >> > - } >> > - if (!*str) { >> > - g_free(str); >> > - *ptr = NULL; >> > - return; >> > - } >> > - ret = parse(dev, str, ptr); >> > - error_set_from_qdev_prop_error(errp, ret, dev, prop, str); >> > - g_free(str); >> > -} >> > - >> > static void get_enum(Object *obj, Visitor *v, void *opaque, >> > const char *name, Error **errp) >> > { >> > @@ -476,227 +433,6 @@ PropertyInfo qdev_prop_string = { >> > .set = set_string, >> > }; >> > >> > -/* --- drive --- */ >> > - >> > -static int parse_drive(DeviceState *dev, const char *str, void **ptr) >> > -{ >> > - BlockDriverState *bs; >> > - >> > - bs = bdrv_find(str); >> > - if (bs == NULL) >> > - return -ENOENT; >> > - if (bdrv_attach_dev(bs, dev) < 0) >> > - return -EEXIST; >> > - *ptr = bs; >> > - return 0; >> > -} >> > - >> > -static void release_drive(Object *obj, const char *name, void *opaque) >> > -{ >> > - DeviceState *dev = DEVICE(obj); >> > - Property *prop = opaque; >> > - BlockDriverState **ptr = qdev_get_prop_ptr(dev, prop); >> > - >> > - if (*ptr) { >> > - bdrv_detach_dev(*ptr, dev); >> > - blockdev_auto_del(*ptr); >> > - } >> > -} >> > - >> > -static const char *print_drive(void *ptr) >> > -{ >> > - return bdrv_get_device_name(ptr); >> > -} >> > - >> > -static void get_drive(Object *obj, Visitor *v, void *opaque, >> > - const char *name, Error **errp) >> > -{ >> > - get_pointer(obj, v, opaque, print_drive, name, errp); >> > -} >> > - >> > -static void set_drive(Object *obj, Visitor *v, void *opaque, >> > - const char *name, Error **errp) >> > -{ >> > - set_pointer(obj, v, opaque, parse_drive, name, errp); >> > -} >> > - >> > -PropertyInfo qdev_prop_drive = { >> > - .name = "drive", >> > - .get = get_drive, >> > - .set = set_drive, >> > - .release = release_drive, >> > -}; >> > - >> > -/* --- character device --- */ >> > - >> > -static int parse_chr(DeviceState *dev, const char *str, void **ptr) >> > -{ >> > - CharDriverState *chr = qemu_chr_find(str); >> > - if (chr == NULL) { >> > - return -ENOENT; >> > - } >> > - if (chr->avail_connections < 1) { >> > - return -EEXIST; >> > - } >> > - *ptr = chr; >> > - --chr->avail_connections; >> > - return 0; >> > -} >> > - >> > -static void release_chr(Object *obj, const char *name, void *opaque) >> > -{ >> > - DeviceState *dev = DEVICE(obj); >> > - Property *prop = opaque; >> > - CharDriverState **ptr = qdev_get_prop_ptr(dev, prop); >> > - >> > - if (*ptr) { >> > - qemu_chr_add_handlers(*ptr, NULL, NULL, NULL, NULL); >> > - } >> > -} >> > - >> > - >> > -static const char *print_chr(void *ptr) >> > -{ >> > - CharDriverState *chr = ptr; >> > - >> > - return chr->label ? chr->label : ""; >> > -} >> > - >> > -static void get_chr(Object *obj, Visitor *v, void *opaque, >> > - const char *name, Error **errp) >> > -{ >> > - get_pointer(obj, v, opaque, print_chr, name, errp); >> > -} >> > - >> > -static void set_chr(Object *obj, Visitor *v, void *opaque, >> > - const char *name, Error **errp) >> > -{ >> > - set_pointer(obj, v, opaque, parse_chr, name, errp); >> > -} >> > - >> > -PropertyInfo qdev_prop_chr = { >> > - .name = "chr", >> > - .get = get_chr, >> > - .set = set_chr, >> > - .release = release_chr, >> > -}; >> > - >> > -/* --- netdev device --- */ >> > - >> > -static int parse_netdev(DeviceState *dev, const char *str, void **ptr) >> > -{ >> > - NetClientState *netdev = qemu_find_netdev(str); >> > - >> > - if (netdev == NULL) { >> > - return -ENOENT; >> > - } >> > - if (netdev->peer) { >> > - return -EEXIST; >> > - } >> > - *ptr = netdev; >> > - return 0; >> > -} >> > - >> > -static const char *print_netdev(void *ptr) >> > -{ >> > - NetClientState *netdev = ptr; >> > - >> > - return netdev->name ? netdev->name : ""; >> > -} >> > - >> > -static void get_netdev(Object *obj, Visitor *v, void *opaque, >> > - const char *name, Error **errp) >> > -{ >> > - get_pointer(obj, v, opaque, print_netdev, name, errp); >> > -} >> > - >> > -static void set_netdev(Object *obj, Visitor *v, void *opaque, >> > - const char *name, Error **errp) >> > -{ >> > - set_pointer(obj, v, opaque, parse_netdev, name, errp); >> > -} >> > - >> > -PropertyInfo qdev_prop_netdev = { >> > - .name = "netdev", >> > - .get = get_netdev, >> > - .set = set_netdev, >> > -}; >> > - >> > -/* --- vlan --- */ >> > - >> > -static int print_vlan(DeviceState *dev, Property *prop, char *dest, >> > size_t len) >> > -{ >> > - NetClientState **ptr = qdev_get_prop_ptr(dev, prop); >> > - >> > - if (*ptr) { >> > - int id; >> > - if (!net_hub_id_for_client(*ptr, &id)) { >> > - return snprintf(dest, len, "%d", id); >> > - } >> > - } >> > - >> > - return snprintf(dest, len, "<null>"); >> > -} >> > - >> > -static void get_vlan(Object *obj, Visitor *v, void *opaque, >> > - const char *name, Error **errp) >> > -{ >> > - DeviceState *dev = DEVICE(obj); >> > - Property *prop = opaque; >> > - NetClientState **ptr = qdev_get_prop_ptr(dev, prop); >> > - int32_t id = -1; >> > - >> > - if (*ptr) { >> > - int hub_id; >> > - if (!net_hub_id_for_client(*ptr, &hub_id)) { >> > - id = hub_id; >> > - } >> > - } >> > - >> > - visit_type_int32(v, &id, name, errp); >> > -} >> > - >> > -static void set_vlan(Object *obj, Visitor *v, void *opaque, >> > - const char *name, Error **errp) >> > -{ >> > - DeviceState *dev = DEVICE(obj); >> > - Property *prop = opaque; >> > - NetClientState **ptr = qdev_get_prop_ptr(dev, prop); >> > - Error *local_err = NULL; >> > - int32_t id; >> > - NetClientState *hubport; >> > - >> > - if (dev->state != DEV_STATE_CREATED) { >> > - error_set(errp, QERR_PERMISSION_DENIED); >> > - return; >> > - } >> > - >> > - visit_type_int32(v, &id, name, &local_err); >> > - if (local_err) { >> > - error_propagate(errp, local_err); >> > - return; >> > - } >> > - if (id == -1) { >> > - *ptr = NULL; >> > - return; >> > - } >> > - >> > - hubport = net_hub_port_find(id); >> > - if (!hubport) { >> > - error_set(errp, QERR_INVALID_PARAMETER_VALUE, >> > - name, prop->info->name); >> > - return; >> > - } >> > - *ptr = hubport; >> > -} >> > - >> > -PropertyInfo qdev_prop_vlan = { >> > - .name = "vlan", >> > - .print = print_vlan, >> > - .get = get_vlan, >> > - .set = set_vlan, >> > -}; >> > - >> > /* --- pointer --- */ >> > >> > /* Not a proper property, just for dirty hacks. TODO Remove it! */ >> > @@ -1158,44 +894,6 @@ void qdev_prop_set_string(DeviceState *dev, const >> > char *name, const char *value) >> > assert_no_error(errp); >> > } >> > >> > -int qdev_prop_set_drive(DeviceState *dev, const char *name, >> > BlockDriverState *value) >> > -{ >> > - Error *errp = NULL; >> > - const char *bdrv_name = value ? bdrv_get_device_name(value) : ""; >> > - object_property_set_str(OBJECT(dev), bdrv_name, >> > - name, &errp); >> > - if (errp) { >> > - qerror_report_err(errp); >> > - error_free(errp); >> > - return -1; >> > - } >> > - return 0; >> > -} >> > - >> > -void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, >> > BlockDriverState *value) >> > -{ >> > - if (qdev_prop_set_drive(dev, name, value) < 0) { >> > - exit(1); >> > - } >> > -} >> > -void qdev_prop_set_chr(DeviceState *dev, const char *name, >> > CharDriverState *value) >> > -{ >> > - Error *errp = NULL; >> > - assert(!value || value->label); >> > - object_property_set_str(OBJECT(dev), >> > - value ? value->label : "", name, &errp); >> > - assert_no_error(errp); >> > -} >> > - >> > -void qdev_prop_set_netdev(DeviceState *dev, const char *name, >> > NetClientState *value) >> > -{ >> > - Error *errp = NULL; >> > - assert(!value || value->name); >> > - object_property_set_str(OBJECT(dev), >> > - value ? value->name : "", name, &errp); >> > - assert_no_error(errp); >> > -} >> > - >> > void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t >> > *value) >> > { >> > Error *errp = NULL; >> > @@ -1231,7 +929,7 @@ void qdev_prop_set_ptr(DeviceState *dev, const char >> > *name, void *value) >> > >> > static QTAILQ_HEAD(, GlobalProperty) global_props = >> > QTAILQ_HEAD_INITIALIZER(global_props); >> > >> > -static void qdev_prop_register_global(GlobalProperty *prop) >> > +void qdev_prop_register_global(GlobalProperty *prop) >> > { >> > QTAILQ_INSERT_TAIL(&global_props, prop, next); >> > } >> > @@ -1262,20 +960,3 @@ void qdev_prop_set_globals(DeviceState *dev) >> > class = object_class_get_parent(class); >> > } while (class); >> > } >> > - >> > -static int qdev_add_one_global(QemuOpts *opts, void *opaque) >> > -{ >> > - GlobalProperty *g; >> > - >> > - g = g_malloc0(sizeof(*g)); >> > - g->driver = qemu_opt_get(opts, "driver"); >> > - g->property = qemu_opt_get(opts, "property"); >> > - g->value = qemu_opt_get(opts, "value"); >> > - qdev_prop_register_global(g); >> > - return 0; >> > -} >> > - >> > -void qemu_add_globals(void) >> > -{ >> > - qemu_opts_foreach(qemu_find_opts("global"), qdev_add_one_global, >> > NULL, 0); >> > -} >> > diff --git a/hw/qdev-properties.h b/hw/qdev-properties.h >> > index 5b046ab..ddcf774 100644 >> > --- a/hw/qdev-properties.h >> > +++ b/hw/qdev-properties.h >> > @@ -116,6 +116,7 @@ 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(GlobalProperty *prop); >> > 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, >> > diff --git a/hw/qdev.c b/hw/qdev.c >> > index 599382c..fa0af21 100644 >> > --- a/hw/qdev.c >> > +++ b/hw/qdev.c >> > @@ -25,7 +25,6 @@ >> > inherit from a particular bus (e.g. PCI or I2C) rather than >> > this API directly. */ >> > >> > -#include "net.h" >> > #include "qdev.h" >> > #include "sysemu.h" >> > #include "error.h" >> > @@ -312,18 +311,6 @@ void qdev_connect_gpio_out(DeviceState * dev, int n, >> > qemu_irq pin) >> > dev->gpio_out[n] = pin; >> > } >> > >> > -void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd) >> > -{ >> > - qdev_prop_set_macaddr(dev, "mac", nd->macaddr.a); >> > - if (nd->netdev) >> > - qdev_prop_set_netdev(dev, "netdev", nd->netdev); >> > - if (nd->nvectors != DEV_NVECTORS_UNSPECIFIED && >> > - object_property_find(OBJECT(dev), "vectors", NULL)) { >> > - qdev_prop_set_uint32(dev, "vectors", nd->nvectors); >> > - } >> > - nd->instantiated = 1; >> > -} >> > - >> > BusState *qdev_get_child_bus(DeviceState *dev, const char *name) >> > { >> > BusState *bus; >> > -- >> > 1.7.11.7 >> > >> > >> > > -- > Eduardo