summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/hwsleep.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/hwsleep.c')
-rw-r--r--sys/contrib/dev/acpica/hwsleep.c46
1 files changed, 27 insertions, 19 deletions
diff --git a/sys/contrib/dev/acpica/hwsleep.c b/sys/contrib/dev/acpica/hwsleep.c
index ba7b341..0b29ce0 100644
--- a/sys/contrib/dev/acpica/hwsleep.c
+++ b/sys/contrib/dev/acpica/hwsleep.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface
- * $Revision: 7 $
+ * $Revision: 11 $
*
*****************************************************************************/
@@ -119,7 +119,7 @@
#include "acnamesp.h"
#include "achware.h"
-#define _COMPONENT HARDWARE
+#define _COMPONENT ACPI_HARDWARE
MODULE_NAME ("hwsleep")
@@ -228,30 +228,32 @@ AcpiGetFirmwareWakingVector (
ACPI_STATUS
AcpiEnterSleepState (
- UINT8 SleepState)
+ UINT8 SleepState)
{
- ACPI_STATUS Status;
- ACPI_OBJECT_LIST ArgList;
- ACPI_OBJECT Arg;
- UINT8 TypeA;
- UINT8 TypeB;
- UINT16 PM1AControl;
- UINT16 PM1BControl;
+ ACPI_STATUS Status;
+ ACPI_OBJECT_LIST ArgList;
+ ACPI_OBJECT Arg;
+ UINT8 TypeA;
+ UINT8 TypeB;
+ UINT16 PM1AControl;
+ UINT16 PM1BControl;
+
FUNCTION_TRACE ("AcpiEnterSleepState");
-
+
+
/*
* _PSW methods could be run here to enable wake-on keyboard, LAN, etc.
*/
- Status = AcpiHwObtainSleepTypeRegisterData(SleepState, &TypeA, &TypeB);
-
- if (!ACPI_SUCCESS(Status))
+ Status = AcpiHwObtainSleepTypeRegisterData (SleepState, &TypeA, &TypeB);
+ if (!ACPI_SUCCESS (Status))
{
return Status;
}
/* run the _PTS and _GTS methods */
+
MEMSET(&ArgList, 0, sizeof(ArgList));
ArgList.Count = 1;
ArgList.Pointer = &Arg;
@@ -262,21 +264,25 @@ AcpiEnterSleepState (
AcpiEvaluateObject(NULL, "\\_PTS", &ArgList, NULL);
AcpiEvaluateObject(NULL, "\\_GTS", &ArgList, NULL);
-
+
/* clear wake status */
+
AcpiHwRegisterBitAccess(ACPI_WRITE, ACPI_MTX_LOCK, WAK_STS, 1);
PM1AControl = (UINT16) AcpiHwRegisterRead(ACPI_MTX_LOCK, PM1_CONTROL);
/* mask off SLP_EN and SLP_TYP fields */
+
PM1AControl &= 0xC3FF;
-
+
/* mask in SLP_EN */
+
PM1AControl |= (1 << AcpiHwGetBitShift (SLP_EN_MASK));
-
+
PM1BControl = PM1AControl;
/* mask in SLP_TYP */
+
PM1AControl |= (TypeA << AcpiHwGetBitShift (SLP_TYPE_X_MASK));
PM1BControl |= (TypeB << AcpiHwGetBitShift (SLP_TYPE_X_MASK));
@@ -286,8 +292,10 @@ AcpiEnterSleepState (
AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1A_CONTROL, PM1AControl);
AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1B_CONTROL, PM1BControl);
- AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1_CONTROL,
- (1 << AcpiHwGetBitShift (SLP_EN_MASK)));
+
+ /* one system won't work with this, one won't work without */
+ /*AcpiHwRegisterWrite(ACPI_MTX_LOCK, PM1_CONTROL,
+ (1 << AcpiHwGetBitShift (SLP_EN_MASK)));*/
enable();
OpenPOWER on IntegriCloud