• P
    qdev: support properties which don't set a default value · 5cc56cc6
    Peter Maydell 提交于
    In some situations it's useful to have a qdev property which doesn't
    automatically set its default value when qdev_property_add_static is
    called (for instance when the default value is not constant).
    
    Support this by adding a flag to the Property struct indicating
    whether to set the default value.  This replaces the existing test
    for whether the PropertyInfo set_default_value function pointer is
    NULL, and we set the .set_default field to true for all those cases
    of struct Property which use a PropertyInfo with a non-NULL
    set_default_value, so behaviour remains the same as before.
    
    This gives us the semantics of:
     * if .set_default is true, then .info->set_default_value must
       be not NULL, and .defval is used as the the default value of
       the property
     * otherwise, the property system does not set any default, and
       the field will retain whatever initial value it was given by
       the device's .instance_init method
    
    We define two new macros DEFINE_PROP_SIGNED_NODEFAULT and
    DEFINE_PROP_UNSIGNED_NODEFAULT, to cover the most plausible use cases
    of wanting to set an integer property with no default value.
    Suggested-by: NMarkus Armbruster <armbru@redhat.com>
    Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
    Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
    Message-id: 1499788408-10096-3-git-send-email-peter.maydell@linaro.org
    5cc56cc6
qdev-core.h 14.0 KB