* Linux sleep support differs from spec...
@ 2004-08-29 12:09 Pavel Machek
0 siblings, 0 replies; only message in thread
From: Pavel Machek @ 2004-08-29 12:09 UTC (permalink / raw)
To: nate-Y6VGUYTwhu0, ACPI mailing list
Hi!
Nate identified quite a few points where linux sleep is broken
implementation differs from specs). See "Acer TM 661 does..." mails.
I thought "oh so that's why compaq notebooks do not sleep", and tried
to fix them. It did not help. (Compaq notebooks do not even *enter*
S3).
Nate, does this address your concerns? [Or did I do something wrong?]
Pavel
--- clean/drivers/acpi/hardware/hwsleep.c 2004-04-05 16:50:18.000000000 +0200
+++ linux/drivers/acpi/hardware/hwsleep.c 2004-08-29 01:16:23.000000000 +0200
@@ -189,11 +189,6 @@
return_ACPI_STATUS (status);
}
- status = acpi_evaluate_object (NULL, METHOD_NAME__GTS, &arg_list, NULL);
- if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
- return_ACPI_STATUS (status);
- }
-
/* Setup the argument to _SST */
switch (sleep_state) {
@@ -250,7 +245,8 @@
struct acpi_bit_register_info *sleep_enable_reg_info;
u32 in_value;
acpi_status status;
-
+ union acpi_object arg;
+ struct acpi_object_list arg_list;
ACPI_FUNCTION_TRACE ("acpi_enter_sleep_state");
@@ -303,6 +299,17 @@
}
ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Entering sleep state [S%d]\n", sleep_state));
+ arg_list.count = 1;
+ arg_list.pointer = &arg;
+
+ arg.type = ACPI_TYPE_INTEGER;
+ arg.integer.value = sleep_state;
+
+ status = acpi_evaluate_object (NULL, METHOD_NAME__GTS, &arg_list, NULL);
+ if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
+ return_ACPI_STATUS (status);
+ }
+
/* Clear SLP_EN and SLP_TYP fields */
PM1Acontrol &= ~(sleep_type_reg_info->access_bit_mask | sleep_enable_reg_info->access_bit_mask);
@@ -311,7 +318,8 @@
/* Insert SLP_TYP bits */
PM1Acontrol |= (acpi_gbl_sleep_type_a << sleep_type_reg_info->bit_position);
- PM1Bcontrol |= (acpi_gbl_sleep_type_b << sleep_type_reg_info->bit_position);
+ PM1Acontrol |= (acpi_gbl_sleep_type_b << sleep_type_reg_info->bit_position);
+ PM1Bcontrol = PM1Acontrol;
/*
* We split the writes of SLP_TYP and SLP_EN to workaround
@@ -320,15 +328,17 @@
/* Write #1: fill in SLP_TYP data */
- status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1A_CONTROL, PM1Acontrol);
+ status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_CONTROL, PM1Acontrol);
if (ACPI_FAILURE (status)) {
return_ACPI_STATUS (status);
}
+#if 0
status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1B_CONTROL, PM1Bcontrol);
if (ACPI_FAILURE (status)) {
return_ACPI_STATUS (status);
}
+#endif
/* Insert SLP_ENABLE bit */
@@ -339,17 +349,20 @@
ACPI_FLUSH_CPU_CACHE ();
- status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1A_CONTROL, PM1Acontrol);
+ status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_CONTROL, PM1Acontrol);
if (ACPI_FAILURE (status)) {
return_ACPI_STATUS (status);
}
+#if 0
status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1B_CONTROL, PM1Bcontrol);
if (ACPI_FAILURE (status)) {
return_ACPI_STATUS (status);
}
+#endif
- if (sleep_state > ACPI_STATE_S3) {
+// if (sleep_state > ACPI_STATE_S3) {
+ if (1) {
/*
* We wanted to sleep > S3, but it didn't happen (by virtue of the fact that
* we are still executing!)
--
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=5047&alloc_id=10808&op=click
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-08-29 12:09 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-29 12:09 Linux sleep support differs from spec Pavel Machek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox