aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/dev/acpica/hwsleep.c
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2007-03-22 17:24:05 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2007-03-22 17:24:05 +0000
commit1a39cfb03c6797452971010e59462692d346a22b (patch)
tree69d0fa3b3760b0abcc0335ff748e39701a8bf064 /sys/contrib/dev/acpica/hwsleep.c
parente9bfb92a8e683016c7f6c24104fce9db9567ee1c (diff)
downloadsrc-1a39cfb03c6797452971010e59462692d346a22b.tar.gz
src-1a39cfb03c6797452971010e59462692d346a22b.zip
Vendor import of Intel ACPI-CA 20070320
Notes
Notes: svn path=/vendor-sys/acpica/dist/; revision=167802
Diffstat (limited to 'sys/contrib/dev/acpica/hwsleep.c')
-rw-r--r--sys/contrib/dev/acpica/hwsleep.c132
1 files changed, 84 insertions, 48 deletions
diff --git a/sys/contrib/dev/acpica/hwsleep.c b/sys/contrib/dev/acpica/hwsleep.c
index 42a1fdfe7200..1b024065013f 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: 1.77 $
+ * $Revision: 1.87 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2007, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,6 +116,7 @@
*****************************************************************************/
#include <contrib/dev/acpica/acpi.h>
+#include <contrib/dev/acpica/actables.h>
#define _COMPONENT ACPI_HARDWARE
ACPI_MODULE_NAME ("hwsleep")
@@ -136,28 +137,45 @@
ACPI_STATUS
AcpiSetFirmwareWakingVector (
- ACPI_PHYSICAL_ADDRESS PhysicalAddress)
+ ACPI_PHYSICAL_ADDRESS PhysicalAddress)
{
+ ACPI_TABLE_FACS *Facs;
+ ACPI_STATUS Status;
+
- ACPI_FUNCTION_TRACE ("AcpiSetFirmwareWakingVector");
+ ACPI_FUNCTION_TRACE (AcpiSetFirmwareWakingVector);
+ /* Get the FACS */
+
+ Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, (ACPI_TABLE_HEADER **) &Facs);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
/* Set the vector */
- if (AcpiGbl_CommonFACS.VectorWidth == 32)
+ if ((Facs->Length < 32) ||
+ (!(Facs->XFirmwareWakingVector)))
{
- *(ACPI_CAST_PTR (UINT32, AcpiGbl_CommonFACS.FirmwareWakingVector))
- = (UINT32) PhysicalAddress;
+ /*
+ * ACPI 1.0 FACS or short table or optional X_ field is zero
+ */
+ Facs->FirmwareWakingVector = (UINT32) PhysicalAddress;
}
else
{
- *AcpiGbl_CommonFACS.FirmwareWakingVector
- = PhysicalAddress;
+ /*
+ * ACPI 2.0 FACS with valid X_ field
+ */
+ Facs->XFirmwareWakingVector = PhysicalAddress;
}
return_ACPI_STATUS (AE_OK);
}
+ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector)
+
/*******************************************************************************
*
@@ -175,10 +193,13 @@ AcpiSetFirmwareWakingVector (
ACPI_STATUS
AcpiGetFirmwareWakingVector (
- ACPI_PHYSICAL_ADDRESS *PhysicalAddress)
+ ACPI_PHYSICAL_ADDRESS *PhysicalAddress)
{
+ ACPI_TABLE_FACS *Facs;
+ ACPI_STATUS Status;
+
- ACPI_FUNCTION_TRACE ("AcpiGetFirmwareWakingVector");
+ ACPI_FUNCTION_TRACE (AcpiGetFirmwareWakingVector);
if (!PhysicalAddress)
@@ -186,22 +207,38 @@ AcpiGetFirmwareWakingVector (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
+ /* Get the FACS */
+
+ Status = AcpiGetTableByIndex (ACPI_TABLE_INDEX_FACS, (ACPI_TABLE_HEADER **) &Facs);
+ if (ACPI_FAILURE (Status))
+ {
+ return_ACPI_STATUS (Status);
+ }
+
/* Get the vector */
- if (AcpiGbl_CommonFACS.VectorWidth == 32)
+ if ((Facs->Length < 32) ||
+ (!(Facs->XFirmwareWakingVector)))
{
- *PhysicalAddress = (ACPI_PHYSICAL_ADDRESS)
- *(ACPI_CAST_PTR (UINT32, AcpiGbl_CommonFACS.FirmwareWakingVector));
+ /*
+ * ACPI 1.0 FACS or short table or optional X_ field is zero
+ */
+ *PhysicalAddress =
+ (ACPI_PHYSICAL_ADDRESS) Facs->FirmwareWakingVector;
}
else
{
- *PhysicalAddress =
- *AcpiGbl_CommonFACS.FirmwareWakingVector;
+ /*
+ * ACPI 2.0 FACS with valid X_ field
+ */
+ *PhysicalAddress = (ACPI_PHYSICAL_ADDRESS) Facs->XFirmwareWakingVector;
}
return_ACPI_STATUS (AE_OK);
}
+ACPI_EXPORT_SYMBOL (AcpiGetFirmwareWakingVector)
+
/*******************************************************************************
*
@@ -227,7 +264,7 @@ AcpiEnterSleepStatePrep (
ACPI_OBJECT Arg;
- ACPI_FUNCTION_TRACE ("AcpiEnterSleepStatePrep");
+ ACPI_FUNCTION_TRACE (AcpiEnterSleepStatePrep);
/*
@@ -290,13 +327,14 @@ AcpiEnterSleepStatePrep (
Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL);
if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
{
- ACPI_REPORT_ERROR (("Method _SST failed, %s\n",
- AcpiFormatException (Status)));
+ ACPI_EXCEPTION ((AE_INFO, Status, "While executing method _SST"));
}
return_ACPI_STATUS (AE_OK);
}
+ACPI_EXPORT_SYMBOL (AcpiEnterSleepStatePrep)
+
/*******************************************************************************
*
@@ -323,13 +361,13 @@ AcpiEnterSleepState (
ACPI_STATUS Status;
- ACPI_FUNCTION_TRACE ("AcpiEnterSleepState");
+ ACPI_FUNCTION_TRACE (AcpiEnterSleepState);
if ((AcpiGbl_SleepTypeA > ACPI_SLEEP_TYPE_MAX) ||
(AcpiGbl_SleepTypeB > ACPI_SLEEP_TYPE_MAX))
{
- ACPI_REPORT_ERROR (("Sleep values out of range: A=%X B=%X\n",
+ ACPI_ERROR ((AE_INFO, "Sleep values out of range: A=%X B=%X",
AcpiGbl_SleepTypeA, AcpiGbl_SleepTypeB));
return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
}
@@ -339,7 +377,7 @@ AcpiEnterSleepState (
/* Clear wake status */
- Status = AcpiSetRegister (ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_DO_NOT_LOCK);
+ Status = AcpiSetRegister (ACPI_BITREG_WAKE_STATUS, 1);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -347,7 +385,7 @@ AcpiEnterSleepState (
/* Clear all fixed and general purpose status bits */
- Status = AcpiHwClearAcpiStatus (ACPI_MTX_DO_NOT_LOCK);
+ Status = AcpiHwClearAcpiStatus ();
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -357,8 +395,7 @@ AcpiEnterSleepState (
{
/* Disable BM arbitration */
- Status = AcpiSetRegister (ACPI_BITREG_ARB_DISABLE,
- 1, ACPI_MTX_DO_NOT_LOCK);
+ Status = AcpiSetRegister (ACPI_BITREG_ARB_DISABLE, 1);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -476,8 +513,7 @@ AcpiEnterSleepState (
do
{
- Status = AcpiGetRegister (ACPI_BITREG_WAKE_STATUS, &InValue,
- ACPI_MTX_DO_NOT_LOCK);
+ Status = AcpiGetRegister (ACPI_BITREG_WAKE_STATUS, &InValue);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -490,6 +526,8 @@ AcpiEnterSleepState (
return_ACPI_STATUS (AE_OK);
}
+ACPI_EXPORT_SYMBOL (AcpiEnterSleepState)
+
/*******************************************************************************
*
@@ -512,16 +550,16 @@ AcpiEnterSleepStateS4bios (
ACPI_STATUS Status;
- ACPI_FUNCTION_TRACE ("AcpiEnterSleepStateS4bios");
+ ACPI_FUNCTION_TRACE (AcpiEnterSleepStateS4bios);
- Status = AcpiSetRegister (ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_DO_NOT_LOCK);
+ Status = AcpiSetRegister (ACPI_BITREG_WAKE_STATUS, 1);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
- Status = AcpiHwClearAcpiStatus (ACPI_MTX_DO_NOT_LOCK);
+ Status = AcpiHwClearAcpiStatus ();
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -546,13 +584,12 @@ AcpiEnterSleepStateS4bios (
ACPI_FLUSH_CPU_CACHE ();
- Status = AcpiOsWritePort (AcpiGbl_FADT->SmiCmd,
- (UINT32) AcpiGbl_FADT->S4BiosReq, 8);
+ Status = AcpiOsWritePort (AcpiGbl_FADT.SmiCommand,
+ (UINT32) AcpiGbl_FADT.S4BiosRequest, 8);
do {
AcpiOsStall(1000);
- Status = AcpiGetRegister (ACPI_BITREG_WAKE_STATUS, &InValue,
- ACPI_MTX_DO_NOT_LOCK);
+ Status = AcpiGetRegister (ACPI_BITREG_WAKE_STATUS, &InValue);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -562,6 +599,8 @@ AcpiEnterSleepStateS4bios (
return_ACPI_STATUS (AE_OK);
}
+ACPI_EXPORT_SYMBOL (AcpiEnterSleepStateS4bios)
+
/*******************************************************************************
*
@@ -589,7 +628,7 @@ AcpiLeaveSleepState (
UINT32 PM1BControl;
- ACPI_FUNCTION_TRACE ("AcpiLeaveSleepState");
+ ACPI_FUNCTION_TRACE (AcpiLeaveSleepState);
/*
@@ -646,23 +685,20 @@ AcpiLeaveSleepState (
Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL);
if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
{
- ACPI_REPORT_ERROR (("Method _SST failed, %s\n",
- AcpiFormatException (Status)));
+ ACPI_EXCEPTION ((AE_INFO, Status, "During Method _SST"));
}
Arg.Integer.Value = SleepState;
Status = AcpiEvaluateObject (NULL, METHOD_NAME__BFS, &ArgList, NULL);
if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
{
- ACPI_REPORT_ERROR (("Method _BFS failed, %s\n",
- AcpiFormatException (Status)));
+ ACPI_EXCEPTION ((AE_INFO, Status, "During Method _BFS"));
}
Status = AcpiEvaluateObject (NULL, METHOD_NAME__WAK, &ArgList, NULL);
if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
{
- ACPI_REPORT_ERROR (("Method _WAK failed, %s\n",
- AcpiFormatException (Status)));
+ ACPI_EXCEPTION ((AE_INFO, Status, "During Method _WAK"));
}
/* TBD: _WAK "sometimes" returns stuff - do we want to look at it? */
@@ -687,16 +723,14 @@ AcpiLeaveSleepState (
/* Enable power button */
(void) AcpiSetRegister(
- AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].EnableRegisterId,
- 1, ACPI_MTX_DO_NOT_LOCK);
+ AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].EnableRegisterId, 1);
(void) AcpiSetRegister(
- AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].StatusRegisterId,
- 1, ACPI_MTX_DO_NOT_LOCK);
+ AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].StatusRegisterId, 1);
/* Enable BM arbitration */
- Status = AcpiSetRegister (ACPI_BITREG_ARB_DISABLE, 0, ACPI_MTX_LOCK);
+ Status = AcpiSetRegister (ACPI_BITREG_ARB_DISABLE, 0);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -706,9 +740,11 @@ AcpiLeaveSleepState (
Status = AcpiEvaluateObject (NULL, METHOD_NAME__SST, &ArgList, NULL);
if (ACPI_FAILURE (Status) && Status != AE_NOT_FOUND)
{
- ACPI_REPORT_ERROR (("Method _SST failed, %s\n",
- AcpiFormatException (Status)));
+ ACPI_EXCEPTION ((AE_INFO, Status, "During Method _SST"));
}
return_ACPI_STATUS (Status);
}
+
+ACPI_EXPORT_SYMBOL (AcpiLeaveSleepState)
+