[S390] pm: zfcp driver power management callbacks
authorMartin Petermann <martin.petermann@de.ibm.com>
Tue, 16 Jun 2009 08:30:34 +0000 (10:30 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 16 Jun 2009 08:31:14 +0000 (10:31 +0200)
Signed-off-by: Martin Petermann <martin.petermann@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/scsi/zfcp_ccw.c

index b2fe5cdbcaeec3cb4462b22040fa6282bd70c7b5..d9da5c42ccbe6ca617bf4f304f0f9ecb1c058ef2 100644 (file)
 
 #define ZFCP_MODEL_PRIV 0x4
 
+static int zfcp_ccw_suspend(struct ccw_device *cdev)
+
+{
+       struct zfcp_adapter *adapter = dev_get_drvdata(&cdev->dev);
+
+       down(&zfcp_data.config_sema);
+
+       zfcp_erp_adapter_shutdown(adapter, 0, "ccsusp1", NULL);
+       zfcp_erp_wait(adapter);
+
+       up(&zfcp_data.config_sema);
+
+       return 0;
+}
+
+static int zfcp_ccw_activate(struct ccw_device *cdev)
+
+{
+       struct zfcp_adapter *adapter = dev_get_drvdata(&cdev->dev);
+
+       zfcp_erp_modify_adapter_status(adapter, "ccresu1", NULL,
+                                      ZFCP_STATUS_COMMON_RUNNING, ZFCP_SET);
+       zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED,
+                               "ccresu2", NULL);
+       zfcp_erp_wait(adapter);
+       flush_work(&adapter->scan_work);
+
+       return 0;
+}
+
 static struct ccw_device_id zfcp_ccw_device_id[] = {
        { CCW_DEVICE_DEVTYPE(0x1731, 0x3, 0x1732, 0x3) },
        { CCW_DEVICE_DEVTYPE(0x1731, 0x3, 0x1732, ZFCP_MODEL_PRIV) },
@@ -227,6 +257,9 @@ static struct ccw_driver zfcp_ccw_driver = {
        .set_offline = zfcp_ccw_set_offline,
        .notify      = zfcp_ccw_notify,
        .shutdown    = zfcp_ccw_shutdown,
+       .freeze      = zfcp_ccw_suspend,
+       .thaw        = zfcp_ccw_activate,
+       .restore     = zfcp_ccw_activate,
 };
 
 /**