[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,7 +1,8 @@
|
||||||
/*
|
/*
|
||||||
* Driver for s390 chsc subchannels
|
* Driver for s390 chsc subchannels
|
||||||
*
|
*
|
||||||
* Copyright IBM Corp. 2008
|
* Copyright IBM Corp. 2008, 2009
|
||||||
|
*
|
||||||
* Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
|
* 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);
|
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[] = {
|
static struct css_device_id chsc_subchannel_ids[] = {
|
||||||
{ .match_flags = 0x1, .type =SUBCHANNEL_TYPE_CHSC, },
|
{ .match_flags = 0x1, .type =SUBCHANNEL_TYPE_CHSC, },
|
||||||
{ /* end of list */ },
|
{ /* end of list */ },
|
||||||
|
@ -125,6 +151,10 @@ static struct css_driver chsc_subchannel_driver = {
|
||||||
.probe = chsc_subchannel_probe,
|
.probe = chsc_subchannel_probe,
|
||||||
.remove = chsc_subchannel_remove,
|
.remove = chsc_subchannel_remove,
|
||||||
.shutdown = chsc_subchannel_shutdown,
|
.shutdown = chsc_subchannel_shutdown,
|
||||||
|
.prepare = chsc_subchannel_prepare,
|
||||||
|
.freeze = chsc_subchannel_freeze,
|
||||||
|
.thaw = chsc_subchannel_restore,
|
||||||
|
.restore = chsc_subchannel_restore,
|
||||||
.name = "chsc_subchannel",
|
.name = "chsc_subchannel",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue