Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
qdev: extend DEFINE_GENERIC_PROP() to support default values
Allow declatration to define default value in string form and
apply it later in device_initfn() using object_property_parse()
for practicaly any property that has a corresponding string visitor.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
  • Loading branch information
Igor Mammedov committed Jan 11, 2013
1 parent 1d139d7 commit e9fd18f
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 0 deletions.
1 change: 1 addition & 0 deletions hw/qdev-core.h
Expand Up @@ -115,6 +115,7 @@ struct Property {
uint8_t bitnr;
uint8_t qtype;
int64_t defval;
const char *defval_str;
};

struct PropertyInfo {
Expand Down
13 changes: 13 additions & 0 deletions hw/qdev-properties.h
Expand Up @@ -28,6 +28,19 @@ extern PropertyInfo qdev_prop_pci_devfn;
extern PropertyInfo qdev_prop_blocksize;
extern PropertyInfo qdev_prop_pci_host_devaddr;

#define DEFINE_GENERIC_PROP(_name, _prop) { \
.name = (_name), \
.info = &(_prop), \
.qtype = QTYPE_QSTRING, \
}

#define DEFINE_GENERIC_PROP_DEFAULT_STR(_name, _defval, _prop) { \
.name = (_name), \
.info = &(_prop), \
.qtype = QTYPE_QSTRING, \
.defval_str = _defval, \
}

#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
.name = (_name), \
.info = &(_prop), \
Expand Down
2 changes: 2 additions & 0 deletions hw/qdev.c
Expand Up @@ -632,6 +632,8 @@ void qdev_property_add_static(DeviceState *dev, Property *prop,
prop->name, &local_err);
} else if (prop->qtype == QTYPE_QINT) {
object_property_set_int(obj, prop->defval, prop->name, &local_err);
} else if (prop->qtype == QTYPE_QSTRING && prop->defval_str) {
object_property_parse(obj, prop->defval_str, prop->name, &local_err);
}
assert_no_error(local_err);
}
Expand Down

0 comments on commit e9fd18f

Please sign in to comment.