From: "Stefan Dösinger" <stefandoesinger-RbZlAiThDcE@public.gmane.org>
To: acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Cc: Pavel Machek <pavel-+ZI9xUNit7I@public.gmane.org>,
"Li,
Shaohua" <shaohua.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"Brown, Len" <len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Carl-Daniel Hailfinger
<c-d.hailfinger.kernel.2004-hi6Y0CQ0nG0@public.gmane.org>,
Johan Vromans <jvromans-2pNSKKP3PSKEVqv0pETR8A@public.gmane.org>
Subject: Re: RE: PATCH: Call acpi_leave_sleep_state before resuming devices
Date: Thu, 20 Jan 2005 14:17:11 +0100 [thread overview]
Message-ID: <200501201417.12228.stefandoesinger@gmx.at> (raw)
In-Reply-To: <20050119211716.GA4066-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 1285 bytes --]
Am Mittwoch, 19. Januar 2005 22:17 schrieb Pavel Machek:
> Hi!
>
> > > > > ACPI spec also said _PTS (in 'acpi_enter_sleep_state_prep') should
> > > > > be called after all devices are suspend (ACPI sepc 3.0 P401), could
> > > > > you please also change the order of device suspend and
> > > > > 'acpi_enter_sleep_state_prep'?
> > > >
> > > > Sorry for the delay, but I was quite busy this week. Here is the
> > > > updated patch which also causes pm_ops->prepare to be called after
> > > > device suspend. Is this correct or should I create another new
> > > > function? What does the spec say?
> > >
> > > Creating another function seems right. Even if ACPI does not need it,
> > > some other suspend mechanism will need it.
> >
> > Allright, here it is. This patch introduces two new suspend/resume
> > functions, pm_ops->setup and pm_ops->leave. There are now 5 functions:
> >
> > prepare: It's called before devices are suspended
> > setup: Called after device suspend but before finally going to sleep
> > enter: Last suspend function
> > leave: Called before devices are beeing resumed
> > finish: Last function, called after device resume
>
> Add this as a comment to pm.h and you have my Acknowledged-by: :-)
Allright, here it is.
Stefan Dösinger
[-- Attachment #2: suspend.diff --]
[-- Type: text/x-diff, Size: 2994 bytes --]
--- linux-2.6.9/include/linux/pm.h 2005-01-20 14:04:54.248337144 +0100
+++ include/linux/pm.h 2005-01-20 14:03:12.000000000 +0100
@@ -206,9 +206,11 @@
struct pm_ops {
suspend_disk_method_t pm_disk_mode;
- int (*prepare)(suspend_state_t state);
- int (*enter)(suspend_state_t state);
- int (*finish)(suspend_state_t state);
+ int (*prepare)(suspend_state_t state); /*Called before suspending devices*/
+ int (*setup)(suspend_state_t state); /*Called after device suspend*/
+ int (*enter)(suspend_state_t state); /*To Finally enter the sleep state*/
+ int (*leave)(suspend_state_t state); /*Before device wakeup*/
+ int (*finish)(suspend_state_t state); /*After device wakeup*/
};
extern void pm_set_ops(struct pm_ops *);
--- linux-2.6.9/kernel/power/main.c 2005-01-20 14:04:54.463304464 +0100
+++ kernel/power/main.c 2005-01-20 14:10:36.499307088 +0100
@@ -67,6 +67,12 @@
if ((error = device_suspend(state)))
goto Finish;
+
+ if (pm_ops->setup) {
+ if ((error = pm_ops->setup(state)))
+ goto Finish;
+ }
+
return 0;
Finish:
if (pm_ops->finish)
@@ -104,6 +110,8 @@
static void suspend_finish(suspend_state_t state)
{
+ if (pm_ops && pm_ops->leave)
+ pm_ops->leave(state);
device_resume();
if (pm_ops && pm_ops->finish)
pm_ops->finish(state);
--- linux-2.6.9/drivers/acpi/sleep/main.c 2005-01-20 14:04:47.382380928 +0100
+++ drivers/acpi/sleep/main.c 2005-01-20 14:12:29.234168784 +0100
@@ -36,7 +36,7 @@
static int init_8259A_after_S1;
/**
- * acpi_pm_prepare - Do preliminary suspend work.
+ * acpi_pm_setup - Do preliminary suspend work.
* @pm_state: suspend state we're entering.
*
* Make sure we support the state. If we do, and we need it, set the
@@ -44,7 +44,7 @@
* wakeup code to the waking vector.
*/
-static int acpi_pm_prepare(suspend_state_t pm_state)
+static int acpi_pm_setup(suspend_state_t pm_state)
{
u32 acpi_state = acpi_suspend_states[pm_state];
@@ -130,7 +130,23 @@
return ACPI_SUCCESS(status) ? 0 : -EFAULT;
}
+/**
+ * acpi_pm_leave - Make system ready to resume devices.
+ * @pm_state: State we're coming out of.
+ *
+ * This is called after we wake back up and before device
+ * resume methods are called.
+ */
+static int acpi_pm_leave(suspend_state_t pm_state)
+{
+ u32 acpi_state = acpi_suspend_states[pm_state];
+
+ acpi_leave_sleep_state(acpi_state);
+ acpi_disable_wakeup_device(acpi_state);
+
+ return 0;
+}
/**
* acpi_pm_finish - Finish up suspend sequence.
* @pm_state: State we're coming out of.
@@ -143,9 +159,6 @@
{
u32 acpi_state = acpi_suspend_states[pm_state];
- acpi_leave_sleep_state(acpi_state);
- acpi_disable_wakeup_device(acpi_state);
-
/* reset firmware waking vector */
acpi_set_firmware_waking_vector((acpi_physical_address) 0);
@@ -171,8 +184,10 @@
}
static struct pm_ops acpi_pm_ops = {
- .prepare = acpi_pm_prepare,
+ .prepare = NULL,
+ .setup = acpi_pm_setup,
.enter = acpi_pm_enter,
+ .leave = acpi_pm_leave,
.finish = acpi_pm_finish,
};
next prev parent reply other threads:[~2005-01-20 13:17 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-10 2:19 PATCH: Call acpi_leave_sleep_state before resuming devices Li, Shaohua
[not found] ` <16A54BF5D6E14E4D916CE26C9AD30575F054DA-4yWAQGcml66iAffOGbnezLfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2005-01-15 9:53 ` Stefan Dösinger
[not found] ` <200501151053.24075.stefandoesinger-RbZlAiThDcE@public.gmane.org>
2005-01-16 21:53 ` Pavel Machek
[not found] ` <20050116215308.GG2757-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2005-01-19 15:36 ` Stefan Dösinger
[not found] ` <200501191636.15174.stefandoesinger-RbZlAiThDcE@public.gmane.org>
2005-01-19 21:17 ` Pavel Machek
[not found] ` <20050119211716.GA4066-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2005-01-20 13:17 ` Stefan Dösinger [this message]
[not found] ` <200501201417.12228.stefandoesinger-RbZlAiThDcE@public.gmane.org>
2005-01-20 20:56 ` Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200501201417.12228.stefandoesinger@gmx.at \
--to=stefandoesinger-rbzlaithdce@public.gmane.org \
--cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=c-d.hailfinger.kernel.2004-hi6Y0CQ0nG0@public.gmane.org \
--cc=jvromans-2pNSKKP3PSKEVqv0pETR8A@public.gmane.org \
--cc=len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=pavel-+ZI9xUNit7I@public.gmane.org \
--cc=shaohua.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox