@@ -74,11 +74,22 @@ void bus_cold_reset(BusState *bus)
resettable_reset(OBJECT(bus), RESET_TYPE_COLD);
}
+void bus_warm_reset(BusState *bus)
+{
+ resettable_reset(OBJECT(bus), RESET_TYPE_WARM);
+}
+
bool bus_is_resetting(BusState *bus)
{
return resettable_is_resetting(OBJECT(bus));
}
+bool bus_test_reset_type(BusState *bus, ResetType type)
+{
+ ResetType cur_type = resettable_get_type(OBJECT(bus));
+ return (cur_type & type);
+}
+
static ResetState *bus_get_reset_state(Object *obj)
{
BusState *bus = BUS(obj);
@@ -281,11 +281,22 @@ void device_cold_reset(DeviceState *dev)
resettable_reset(OBJECT(dev), RESET_TYPE_COLD);
}
+void device_warm_reset(DeviceState *dev)
+{
+ resettable_reset(OBJECT(dev), RESET_TYPE_WARM);
+}
+
bool device_is_resetting(DeviceState *dev)
{
return resettable_is_resetting(OBJECT(dev));
}
+bool device_test_reset_type(DeviceState *dev, ResetType type)
+{
+ ResetType cur_type = resettable_get_type(OBJECT(dev));
+ return (cur_type & type);
+}
+
static ResetState *device_get_reset_state(Object *obj)
{
DeviceState *dev = DEVICE(obj);
@@ -422,18 +422,52 @@ void device_cold_reset(DeviceState *dev);
*/
void bus_cold_reset(BusState *bus);
+/**
+ * device_warm_reset:
+ * Trigger a warm reset of the device @dev.
+ *
+ * Use the Resettable interface (see hw/interface.h); it also reset the
+ * device's qdev/qbus subtree.
+ */
+void device_warm_reset(DeviceState *dev);
+
+/**
+ * bus_warm_reset:
+ * Trigger a warm reset of the bus @bus.
+ *
+ * Use the Resettable interface (see hw/interface.h); it also reset the
+ * bus's qdev/qbus subtree.
+ */
+void bus_warm_reset(BusState *bus);
+
/**
* device_is_resetting:
* Return true if the device @dev is currently being reset.
*/
bool device_is_resetting(DeviceState *dev);
+/**
+ * device_test_reset_type:
+ * Return true if the device @dev is currently under reset type
+ * @type.
+ * Only valid if device_is_resetting() is true
+ */
+bool device_test_reset_type(DeviceState *dev, ResetType type);
+
/**
* bus_is_resetting:
* Return true if the bus @bus is currently being reset.
*/
bool bus_is_resetting(BusState *bus);
+/**
+ * bus_test_reset_type:
+ * Return true if the bus @bus is currently under reset type
+ * @type.
+ * Only valid if device_is_resetting() is true
+ */
+bool bus_test_reset_type(BusState *bus, ResetType type);
+
/* This should go away once we get rid of the NULL bus hack */
BusState *sysbus_get_default(void);
This add helpers to trigger warm reset and to retrieve the reset current reset type. Signed-off-by: Damien Hedde <damien.hedde@greensocs.com> --- hw/core/bus.c | 11 +++++++++++ hw/core/qdev.c | 11 +++++++++++ include/hw/qdev-core.h | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+)