Loading drivers/s390/net/lcs.c +65 −9 Original line number Diff line number Diff line /* * linux/drivers/s390/net/lcs.c * * Linux for S/390 Lan Channel Station Network Driver * * Copyright (C) 1999-2001 IBM Deutschland Entwicklung GmbH, * IBM Corporation * Copyright IBM Corp. 1999, 2009 * Author(s): Original Code written by * DJ Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) * DJ Barrow <djbarrow@de.ibm.com,barrow_dj@yahoo.com> * Rewritten by * Frank Pavlic (fpavlic@de.ibm.com) and * Frank Pavlic <fpavlic@de.ibm.com> and * Martin Schwidefsky <schwidefsky@de.ibm.com> * * This program is free software; you can redistribute it and/or modify Loading Loading @@ -2313,6 +2310,60 @@ lcs_remove_device(struct ccwgroup_device *ccwgdev) put_device(&ccwgdev->dev); } static int lcs_pm_suspend(struct lcs_card *card) { if (card->dev) netif_device_detach(card->dev); lcs_set_allowed_threads(card, 0); lcs_wait_for_threads(card, 0xffffffff); if (card->state != DEV_STATE_DOWN) __lcs_shutdown_device(card->gdev, 1); return 0; } static int lcs_pm_resume(struct lcs_card *card) { int rc = 0; if (card->state == DEV_STATE_RECOVER) rc = lcs_new_device(card->gdev); if (card->dev) netif_device_attach(card->dev); if (rc) { dev_warn(&card->gdev->dev, "The lcs device driver " "failed to recover the device\n"); } return rc; } static int lcs_prepare(struct ccwgroup_device *gdev) { return 0; } static void lcs_complete(struct ccwgroup_device *gdev) { return; } static int lcs_freeze(struct ccwgroup_device *gdev) { struct lcs_card *card = dev_get_drvdata(&gdev->dev); return lcs_pm_suspend(card); } static int lcs_thaw(struct ccwgroup_device *gdev) { struct lcs_card *card = dev_get_drvdata(&gdev->dev); return lcs_pm_resume(card); } static int lcs_restore(struct ccwgroup_device *gdev) { struct lcs_card *card = dev_get_drvdata(&gdev->dev); return lcs_pm_resume(card); } /** * LCS ccwgroup driver registration */ Loading @@ -2325,6 +2376,11 @@ static struct ccwgroup_driver lcs_group_driver = { .remove = lcs_remove_device, .set_online = lcs_new_device, .set_offline = lcs_shutdown_device, .prepare = lcs_prepare, .complete = lcs_complete, .freeze = lcs_freeze, .thaw = lcs_thaw, .restore = lcs_restore, }; /** Loading Loading
drivers/s390/net/lcs.c +65 −9 Original line number Diff line number Diff line /* * linux/drivers/s390/net/lcs.c * * Linux for S/390 Lan Channel Station Network Driver * * Copyright (C) 1999-2001 IBM Deutschland Entwicklung GmbH, * IBM Corporation * Copyright IBM Corp. 1999, 2009 * Author(s): Original Code written by * DJ Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) * DJ Barrow <djbarrow@de.ibm.com,barrow_dj@yahoo.com> * Rewritten by * Frank Pavlic (fpavlic@de.ibm.com) and * Frank Pavlic <fpavlic@de.ibm.com> and * Martin Schwidefsky <schwidefsky@de.ibm.com> * * This program is free software; you can redistribute it and/or modify Loading Loading @@ -2313,6 +2310,60 @@ lcs_remove_device(struct ccwgroup_device *ccwgdev) put_device(&ccwgdev->dev); } static int lcs_pm_suspend(struct lcs_card *card) { if (card->dev) netif_device_detach(card->dev); lcs_set_allowed_threads(card, 0); lcs_wait_for_threads(card, 0xffffffff); if (card->state != DEV_STATE_DOWN) __lcs_shutdown_device(card->gdev, 1); return 0; } static int lcs_pm_resume(struct lcs_card *card) { int rc = 0; if (card->state == DEV_STATE_RECOVER) rc = lcs_new_device(card->gdev); if (card->dev) netif_device_attach(card->dev); if (rc) { dev_warn(&card->gdev->dev, "The lcs device driver " "failed to recover the device\n"); } return rc; } static int lcs_prepare(struct ccwgroup_device *gdev) { return 0; } static void lcs_complete(struct ccwgroup_device *gdev) { return; } static int lcs_freeze(struct ccwgroup_device *gdev) { struct lcs_card *card = dev_get_drvdata(&gdev->dev); return lcs_pm_suspend(card); } static int lcs_thaw(struct ccwgroup_device *gdev) { struct lcs_card *card = dev_get_drvdata(&gdev->dev); return lcs_pm_resume(card); } static int lcs_restore(struct ccwgroup_device *gdev) { struct lcs_card *card = dev_get_drvdata(&gdev->dev); return lcs_pm_resume(card); } /** * LCS ccwgroup driver registration */ Loading @@ -2325,6 +2376,11 @@ static struct ccwgroup_driver lcs_group_driver = { .remove = lcs_remove_device, .set_online = lcs_new_device, .set_offline = lcs_shutdown_device, .prepare = lcs_prepare, .complete = lcs_complete, .freeze = lcs_freeze, .thaw = lcs_thaw, .restore = lcs_restore, }; /** Loading