mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
[S390] pm: chsc subchannel driver power management callbacks
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
93a275921d
commit
ad285ae9fc
1 changed files with 31 additions and 1 deletions
|
@ -1,7 +1,8 @@
|
|||
/*
|
||||
* Driver for s390 chsc subchannels
|
||||
*
|
||||
* Copyright IBM Corp. 2008
|
||||
* Copyright IBM Corp. 2008, 2009
|
||||
*
|
||||
* Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
|
||||
*
|
||||
*/
|
||||
|
@ -112,6 +113,31 @@ static void chsc_subchannel_shutdown(struct subchannel *sch)
|
|||
cio_disable_subchannel(sch);
|
||||
}
|
||||
|
||||
static int chsc_subchannel_prepare(struct subchannel *sch)
|
||||
{
|
||||
int cc;
|
||||
struct schib schib;
|
||||
/*
|
||||
* Don't allow suspend while the subchannel is not idle
|
||||
* since we don't have a way to clear the subchannel and
|
||||
* cannot disable it with a request running.
|
||||
*/
|
||||
cc = stsch(sch->schid, &schib);
|
||||
if (!cc && scsw_stctl(&schib.scsw))
|
||||
return -EAGAIN;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int chsc_subchannel_freeze(struct subchannel *sch)
|
||||
{
|
||||
return cio_disable_subchannel(sch);
|
||||
}
|
||||
|
||||
static int chsc_subchannel_restore(struct subchannel *sch)
|
||||
{
|
||||
return cio_enable_subchannel(sch, (u32)(unsigned long)sch);
|
||||
}
|
||||
|
||||
static struct css_device_id chsc_subchannel_ids[] = {
|
||||
{ .match_flags = 0x1, .type =SUBCHANNEL_TYPE_CHSC, },
|
||||
{ /* end of list */ },
|
||||
|
@ -125,6 +151,10 @@ static struct css_driver chsc_subchannel_driver = {
|
|||
.probe = chsc_subchannel_probe,
|
||||
.remove = chsc_subchannel_remove,
|
||||
.shutdown = chsc_subchannel_shutdown,
|
||||
.prepare = chsc_subchannel_prepare,
|
||||
.freeze = chsc_subchannel_freeze,
|
||||
.thaw = chsc_subchannel_restore,
|
||||
.restore = chsc_subchannel_restore,
|
||||
.name = "chsc_subchannel",
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue