mirror of
https://github.com/acpica/acpica/
synced 2025-03-06 14:21:47 +03:00
Check status for wake/sleep methods
date 2001.12.03.21.12.00; author rmoore1; state Exp;
This commit is contained in:
parent
f612d99cde
commit
85ab06a367
@ -2,7 +2,7 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface
|
||||
* $Revision: 1.25 $
|
||||
* $Revision: 1.26 $
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@ -241,8 +241,10 @@ AcpiEnterSleepStatePrep (
|
||||
ACPI_OBJECT_LIST ArgList;
|
||||
ACPI_OBJECT Arg;
|
||||
|
||||
|
||||
FUNCTION_TRACE ("AcpiEnterSleepStatePrep");
|
||||
|
||||
|
||||
/*
|
||||
* _PSW methods could be run here to enable wake-on keyboard, LAN, etc.
|
||||
*/
|
||||
@ -252,7 +254,7 @@ AcpiEnterSleepStatePrep (
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
/* run the _PTS and _GTS methods */
|
||||
/* Run the _PTS and _GTS methods */
|
||||
|
||||
MEMSET(&ArgList, 0, sizeof(ArgList));
|
||||
ArgList.Count = 1;
|
||||
@ -262,10 +264,14 @@ AcpiEnterSleepStatePrep (
|
||||
Arg.Type = ACPI_TYPE_INTEGER;
|
||||
Arg.Integer.Value = SleepState;
|
||||
|
||||
AcpiEvaluateObject (NULL, "\\_PTS", &ArgList, NULL);
|
||||
AcpiEvaluateObject (NULL, "\\_GTS", &ArgList, NULL);
|
||||
Status = AcpiEvaluateObject (NULL, "\\_PTS", &ArgList, NULL);
|
||||
if (!ACPI_SUCCESS (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
Status = AcpiEvaluateObject (NULL, "\\_GTS", &ArgList, NULL);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
|
||||
@ -293,6 +299,7 @@ AcpiEnterSleepState (
|
||||
|
||||
FUNCTION_TRACE ("AcpiEnterSleepState");
|
||||
|
||||
|
||||
if ((SleepTypeA > ACPI_SLEEP_TYPE_MAX) ||
|
||||
(SleepTypeB > ACPI_SLEEP_TYPE_MAX))
|
||||
{
|
||||
@ -301,13 +308,13 @@ AcpiEnterSleepState (
|
||||
return_ACPI_STATUS (AE_ERROR);
|
||||
}
|
||||
|
||||
/* clear wake status */
|
||||
/* Clear wake status */
|
||||
|
||||
AcpiHwRegisterBitAccess (ACPI_WRITE, ACPI_MTX_LOCK, WAK_STS, 1);
|
||||
|
||||
AcpiHwClearAcpiStatus();
|
||||
|
||||
/* disable arbitration here? */
|
||||
/* Disable arbitration here? */
|
||||
|
||||
AcpiHwDisableNonWakeupGpes();
|
||||
|
||||
@ -315,27 +322,27 @@ AcpiEnterSleepState (
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Entering S%d\n", SleepState));
|
||||
|
||||
/* mask off SLP_EN and SLP_TYP fields */
|
||||
/* Mask off SLP_EN and SLP_TYP fields */
|
||||
|
||||
PM1AControl &= ~(SLP_TYPE_X_MASK | SLP_EN_MASK);
|
||||
PM1BControl = PM1AControl;
|
||||
|
||||
/* mask in SLP_TYP */
|
||||
/* Mask in SLP_TYP */
|
||||
|
||||
PM1AControl |= (SleepTypeA << AcpiHwGetBitShift (SLP_TYPE_X_MASK));
|
||||
PM1BControl |= (SleepTypeB << AcpiHwGetBitShift (SLP_TYPE_X_MASK));
|
||||
|
||||
/* write #1: fill in SLP_TYP data */
|
||||
/* Write #1: fill in SLP_TYP data */
|
||||
|
||||
AcpiHwRegisterWrite (ACPI_MTX_LOCK, PM1A_CONTROL, PM1AControl);
|
||||
AcpiHwRegisterWrite (ACPI_MTX_LOCK, PM1B_CONTROL, PM1BControl);
|
||||
|
||||
/* mask in SLP_EN */
|
||||
/* Mask in SLP_EN */
|
||||
|
||||
PM1AControl |= (1 << AcpiHwGetBitShift (SLP_EN_MASK));
|
||||
PM1BControl |= (1 << AcpiHwGetBitShift (SLP_EN_MASK));
|
||||
|
||||
/* write #2: SLP_TYP + SLP_EN */
|
||||
/* Write #2: SLP_TYP + SLP_EN */
|
||||
|
||||
AcpiHwRegisterWrite (ACPI_MTX_LOCK, PM1A_CONTROL, PM1AControl);
|
||||
AcpiHwRegisterWrite (ACPI_MTX_LOCK, PM1B_CONTROL, PM1BControl);
|
||||
@ -351,11 +358,11 @@ AcpiEnterSleepState (
|
||||
(1 << AcpiHwGetBitShift (SLP_EN_MASK)));
|
||||
}
|
||||
|
||||
/* wait until we enter sleep state */
|
||||
/* Wait until we enter sleep state */
|
||||
|
||||
while (!AcpiHwRegisterBitAccess (ACPI_READ, ACPI_MTX_LOCK, WAK_STS))
|
||||
{
|
||||
/* spin until we wake */
|
||||
/* Spin until we wake */
|
||||
}
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
@ -379,11 +386,14 @@ AcpiLeaveSleepState (
|
||||
{
|
||||
ACPI_OBJECT_LIST ArgList;
|
||||
ACPI_OBJECT Arg;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
FUNCTION_TRACE ("AcpiLeaveSleepState");
|
||||
|
||||
|
||||
/* Ensure EnterSleepStatePrep -> EnterSleepState ordering */
|
||||
|
||||
SleepTypeA = ACPI_SLEEP_TYPE_INVALID;
|
||||
|
||||
MEMSET (&ArgList, 0, sizeof(ArgList));
|
||||
@ -394,12 +404,23 @@ AcpiLeaveSleepState (
|
||||
Arg.Type = ACPI_TYPE_INTEGER;
|
||||
Arg.Integer.Value = SleepState;
|
||||
|
||||
AcpiEvaluateObject (NULL, "\\_BFS", &ArgList, NULL);
|
||||
AcpiEvaluateObject (NULL, "\\_WAK", &ArgList, NULL);
|
||||
/* Ignore any errors from these methods */
|
||||
|
||||
Status = AcpiEvaluateObject (NULL, "\\_BFS", &ArgList, NULL);
|
||||
if (!ACPI_SUCCESS (Status))
|
||||
{
|
||||
REPORT_ERROR (("Method _BFS failed, %s\n", AcpiFormatException (Status)));
|
||||
}
|
||||
|
||||
Status = AcpiEvaluateObject (NULL, "\\_WAK", &ArgList, NULL);
|
||||
if (!ACPI_SUCCESS (Status))
|
||||
{
|
||||
REPORT_ERROR (("Method _WAK failed, %s\n", AcpiFormatException (Status)));
|
||||
}
|
||||
|
||||
/* _WAK returns stuff - do we want to look at it? */
|
||||
|
||||
AcpiHwEnableNonWakeupGpes();
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user