Message ID | 1363161681-13878-5-git-send-email-lig.fnst@cn.fujitsu.com |
---|---|
State | New |
Headers | show |
Am 13.03.2013 09:01, schrieb liguang: > Signed-off-by: liguang <lig.fnst@cn.fujitsu.com> > --- > hw/qdev-core.h | 9 +++++ > hw/qdev.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 105 insertions(+), 0 deletions(-) > > diff --git a/hw/qdev-core.h b/hw/qdev-core.h > index e69c50b..805ac69 100644 > --- a/hw/qdev-core.h > +++ b/hw/qdev-core.h > @@ -262,6 +262,15 @@ void qdev_reset_all(DeviceState *dev); > void qbus_reset_all(BusState *bus); > void qbus_reset_all_fn(void *opaque); > > +void qdev_power_on(DeviceState *dev); > +void qdev_power_off(DeviceState *dev); > +void qdev_power_wakeup(DeviceState *dev); > +void qdev_power_suspend(DeviceState *dev); No new qdev_ functions please. qdev no longer exists in its original form since the QOM introduction. Please use device_ instead. Note that here you use power_*, so it may be worth using an identical callback field name for at least on and off if we go with your concept. Andreas > +void qbus_power_off(void *opaque); > +void qbus_power_wakeup(void *opaque); > +void qbus_power_suspend(void *opaque); > +void qbus_power_on(void *opaque); > + > void qbus_free(BusState *bus); > > #define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev) [snip]
在 2013-03-18一的 09:31 +0100,Andreas Färber写道: > Am 13.03.2013 09:01, schrieb liguang: > > Signed-off-by: liguang <lig.fnst@cn.fujitsu.com> > > --- > > hw/qdev-core.h | 9 +++++ > > hw/qdev.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 105 insertions(+), 0 deletions(-) > > > > diff --git a/hw/qdev-core.h b/hw/qdev-core.h > > index e69c50b..805ac69 100644 > > --- a/hw/qdev-core.h > > +++ b/hw/qdev-core.h > > @@ -262,6 +262,15 @@ void qdev_reset_all(DeviceState *dev); > > void qbus_reset_all(BusState *bus); > > void qbus_reset_all_fn(void *opaque); > > > > +void qdev_power_on(DeviceState *dev); > > +void qdev_power_off(DeviceState *dev); > > +void qdev_power_wakeup(DeviceState *dev); > > +void qdev_power_suspend(DeviceState *dev); > > No new qdev_ functions please. qdev no longer exists in its original > form since the QOM introduction. Please use device_ instead. > > Note that here you use power_*, so it may be worth using an identical > callback field name for at least on and off if we go with your concept. > > Andreas Good suggestion! Thanks! > > > +void qbus_power_off(void *opaque); > > +void qbus_power_wakeup(void *opaque); > > +void qbus_power_suspend(void *opaque); > > +void qbus_power_on(void *opaque); > > + > > void qbus_free(BusState *bus); > > > > #define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev) > [snip] >
diff --git a/hw/qdev-core.h b/hw/qdev-core.h index e69c50b..805ac69 100644 --- a/hw/qdev-core.h +++ b/hw/qdev-core.h @@ -262,6 +262,15 @@ void qdev_reset_all(DeviceState *dev); void qbus_reset_all(BusState *bus); void qbus_reset_all_fn(void *opaque); +void qdev_power_on(DeviceState *dev); +void qdev_power_off(DeviceState *dev); +void qdev_power_wakeup(DeviceState *dev); +void qdev_power_suspend(DeviceState *dev); +void qbus_power_off(void *opaque); +void qbus_power_wakeup(void *opaque); +void qbus_power_suspend(void *opaque); +void qbus_power_on(void *opaque); + void qbus_free(BusState *bus); #define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev) diff --git a/hw/qdev.c b/hw/qdev.c index 2bed9d8..dfc265d 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -237,6 +237,102 @@ void qbus_reset_all_fn(void *opaque) qbus_reset_all(bus); } +static int qdev_off_one(DeviceState *dev, void *opaque) +{ + device_reset(dev); + + return 0; +} + +static int qbus_off_one(BusState *bus, void *opaque) +{ + return 0; +} + +static int qdev_on_one(DeviceState *dev, void *opaque) +{ + device_reset(dev); + + return 0; +} + +static int qbus_on_one(BusState *bus, void *opaque) +{ + return 0; +} + +static int qdev_wakeup_one(DeviceState *dev, void *opaque) +{ + device_reset(dev); + + return 0; +} + +static int qbus_wakeup_one(BusState *bus, void *opaque) +{ + return 0; +} + +static int qdev_suspend_one(DeviceState *dev, void *opaque) +{ + device_reset(dev); + + return 0; +} + +static int qbus_suspend_one(BusState *bus, void *opaque) +{ + return 0; +} + +void qdev_power_on(DeviceState *dev) +{ + qdev_walk_children(dev, qdev_on_one, qbus_on_one, NULL); +} + +void qbus_power_on(void *opaque) +{ + BusState *bus = opaque; + + qbus_walk_children(bus, qdev_on_one, qbus_on_one, NULL); +} + +void qdev_power_off(DeviceState *dev) +{ + qdev_walk_children(dev, qdev_off_one, qbus_off_one, NULL); +} + +void qbus_power_off(void *opaque) +{ + BusState *bus = opaque; + + qbus_walk_children(bus, qdev_off_one, qbus_off_one, NULL); +} + +void qdev_power_wakeup(DeviceState *dev) +{ + qdev_walk_children(dev, qdev_wakeup_one, qbus_wakeup_one, NULL); +} + +void qbus_power_wakeup(void *opaque) +{ + BusState *bus = opaque; + + qbus_walk_children(bus, qdev_wakeup_one, qbus_wakeup_one, NULL); +} + +void qdev_power_suspend(DeviceState *dev) +{ + qdev_walk_children(dev, qdev_suspend_one, qbus_suspend_one, NULL); +} + +void qbus_power_suspend(void *opaque) +{ + BusState *bus = opaque; + + qbus_walk_children(bus, qdev_suspend_one, qbus_suspend_one, NULL); +} + /* can be used as ->unplug() callback for the simple cases */ int qdev_simple_unplug_cb(DeviceState *dev) {
Signed-off-by: liguang <lig.fnst@cn.fujitsu.com> --- hw/qdev-core.h | 9 +++++ hw/qdev.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 0 deletions(-)