|
@@ -1297,6 +1297,9 @@ static int virtio_ccw_cio_notify(struct ccw_device *cdev, int event)
|
|
|
vcdev->device_lost = true;
|
|
|
rc = NOTIFY_DONE;
|
|
|
break;
|
|
|
+ case CIO_OPER:
|
|
|
+ rc = NOTIFY_OK;
|
|
|
+ break;
|
|
|
default:
|
|
|
rc = NOTIFY_DONE;
|
|
|
break;
|
|
@@ -1309,6 +1312,27 @@ static struct ccw_device_id virtio_ids[] = {
|
|
|
{},
|
|
|
};
|
|
|
|
|
|
+#ifdef CONFIG_PM_SLEEP
|
|
|
+static int virtio_ccw_freeze(struct ccw_device *cdev)
|
|
|
+{
|
|
|
+ struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev);
|
|
|
+
|
|
|
+ return virtio_device_freeze(&vcdev->vdev);
|
|
|
+}
|
|
|
+
|
|
|
+static int virtio_ccw_restore(struct ccw_device *cdev)
|
|
|
+{
|
|
|
+ struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev);
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = virtio_ccw_set_transport_rev(vcdev);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ return virtio_device_restore(&vcdev->vdev);
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
static struct ccw_driver virtio_ccw_driver = {
|
|
|
.driver = {
|
|
|
.owner = THIS_MODULE,
|
|
@@ -1321,6 +1345,11 @@ static struct ccw_driver virtio_ccw_driver = {
|
|
|
.set_online = virtio_ccw_online,
|
|
|
.notify = virtio_ccw_cio_notify,
|
|
|
.int_class = IRQIO_VIR,
|
|
|
+#ifdef CONFIG_PM_SLEEP
|
|
|
+ .freeze = virtio_ccw_freeze,
|
|
|
+ .thaw = virtio_ccw_restore,
|
|
|
+ .restore = virtio_ccw_restore,
|
|
|
+#endif
|
|
|
};
|
|
|
|
|
|
static int __init pure_hex(char **cp, unsigned int *val, int min_digit,
|