[S390] pm: ctcm driver power management callbacks
authorFrank Blaschka <frank.blaschka@de.ibm.com>
Tue, 16 Jun 2009 08:30:32 +0000 (10:30 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 16 Jun 2009 08:31:13 +0000 (10:31 +0200)
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/net/ctcm_main.c

index 54c4649a493bd27399f107032926662a79370d15..222e4739443715902dd5e5ce38b1f5a924b4e3cb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * drivers/s390/net/ctcm_main.c
  *
- * Copyright IBM Corp. 2001, 2007
+ * Copyright IBM Corp. 2001, 2009
  * Author(s):
  *     Original CTC driver(s):
  *             Fritz Elfert (felfert@millenux.com)
@@ -1688,6 +1688,38 @@ static void ctcm_remove_device(struct ccwgroup_device *cgdev)
        put_device(&cgdev->dev);
 }
 
+static int ctcm_pm_suspend(struct ccwgroup_device *gdev)
+{
+       struct ctcm_priv *priv = dev_get_drvdata(&gdev->dev);
+
+       if (gdev->state == CCWGROUP_OFFLINE)
+               return 0;
+       netif_device_detach(priv->channel[READ]->netdev);
+       ctcm_close(priv->channel[READ]->netdev);
+       ccw_device_set_offline(gdev->cdev[1]);
+       ccw_device_set_offline(gdev->cdev[0]);
+       return 0;
+}
+
+static int ctcm_pm_resume(struct ccwgroup_device *gdev)
+{
+       struct ctcm_priv *priv = dev_get_drvdata(&gdev->dev);
+       int rc;
+
+       if (gdev->state == CCWGROUP_OFFLINE)
+               return 0;
+       rc = ccw_device_set_online(gdev->cdev[1]);
+       if (rc)
+               goto err_out;
+       rc = ccw_device_set_online(gdev->cdev[0]);
+       if (rc)
+               goto err_out;
+       ctcm_open(priv->channel[READ]->netdev);
+err_out:
+       netif_device_attach(priv->channel[READ]->netdev);
+       return rc;
+}
+
 static struct ccwgroup_driver ctcm_group_driver = {
        .owner       = THIS_MODULE,
        .name        = CTC_DRIVER_NAME,
@@ -1697,6 +1729,9 @@ static struct ccwgroup_driver ctcm_group_driver = {
        .remove      = ctcm_remove_device,
        .set_online  = ctcm_new_device,
        .set_offline = ctcm_shutdown_device,
+       .freeze      = ctcm_pm_suspend,
+       .thaw        = ctcm_pm_resume,
+       .restore     = ctcm_pm_resume,
 };