aboutsummaryrefslogtreecommitdiff
path: root/tools/acpiexec
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2010-12-09 20:04:14 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2010-12-09 20:04:14 +0000
commit0f70714e43f23ff5f3e72fa406814e26bdad006a (patch)
treec88f8fbca7e5c63afb07147d504c55311683cb5d /tools/acpiexec
parent11641cd290cbb4765d39dadd5a4eee278b8769ee (diff)
Notes
Diffstat (limited to 'tools/acpiexec')
-rw-r--r--tools/acpiexec/Makefile4
-rw-r--r--tools/acpiexec/aecommon.h9
-rw-r--r--tools/acpiexec/aeexec.c21
-rw-r--r--tools/acpiexec/aehandlers.c58
4 files changed, 88 insertions, 4 deletions
diff --git a/tools/acpiexec/Makefile b/tools/acpiexec/Makefile
index 640d992f2ac8..827a4187a952 100644
--- a/tools/acpiexec/Makefile
+++ b/tools/acpiexec/Makefile
@@ -61,6 +61,7 @@ OBJS = \
evsci.o \
evxface.o \
evxfevnt.o \
+ evxfgpe.o \
evxfregn.o \
exconfig.o \
exconvrt.o \
@@ -317,6 +318,9 @@ evxface.o : $(ACPICA_CORE)/events/evxface.c
evxfevnt.o : $(ACPICA_CORE)/events/evxfevnt.c
$(COMPILE)
+evxfgpe.o : $(ACPICA_CORE)/events/evxfgpe.c
+ $(COMPILE)
+
evxfregn.o : $(ACPICA_CORE)/events/evxfregn.c
$(COMPILE)
diff --git a/tools/acpiexec/aecommon.h b/tools/acpiexec/aecommon.h
index 3b7d36d9912e..ce134104ce69 100644
--- a/tools/acpiexec/aecommon.h
+++ b/tools/acpiexec/aecommon.h
@@ -250,6 +250,15 @@ AeRegionHandler (
UINT32
AeGpeHandler (
+ ACPI_HANDLE GpeDevice,
+ UINT32 GpeNumber,
+ void *Context);
+
+void
+AeGlobalEventHandler (
+ UINT32 Type,
+ ACPI_HANDLE GpeDevice,
+ UINT32 EventNumber,
void *Context);
#endif /* _AECOMMON */
diff --git a/tools/acpiexec/aeexec.c b/tools/acpiexec/aeexec.c
index baf1aeb75b15..b90ecaedfa25 100644
--- a/tools/acpiexec/aeexec.c
+++ b/tools/acpiexec/aeexec.c
@@ -586,6 +586,9 @@ AeMiscellaneousTests (
Status = AcpiEnableEvent (ACPI_EVENT_GLOBAL, 0);
AE_CHECK_OK (AcpiEnableEvent, Status);
+ Status = AcpiInstallGlobalEventHandler (AeGlobalEventHandler, NULL);
+ AE_CHECK_OK (AcpiInstallGlobalEventHandler, Status);
+
/*
* GPEs: Handlers, enable/disable, etc.
*/
@@ -634,6 +637,20 @@ AeMiscellaneousTests (
Status = AcpiInstallGpeHandler (NULL, 5, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL);
AE_CHECK_OK (AcpiInstallGpeHandler, Status);
+ Status = AcpiGetHandle (NULL, "\\_SB", &Handle);
+ AE_CHECK_OK (AcpiGetHandle, Status);
+
+ Status = AcpiSetupGpeForWake (Handle, NULL, 5);
+ AE_CHECK_OK (AcpiSetupGpeForWake, Status);
+
+ Status = AcpiSetGpeWakeMask (NULL, 5, ACPI_GPE_ENABLE);
+ AE_CHECK_OK (AcpiGpeWakeup, Status);
+
+ Status = AcpiSetupGpeForWake (Handle, NULL, 6);
+ AE_CHECK_OK (AcpiSetupGpeForWake, Status);
+
+ Status = AcpiSetupGpeForWake (Handle, NULL, 9);
+ AE_CHECK_OK (AcpiSetupGpeForWake, Status);
Status = AcpiInstallGpeHandler (NULL, 0x19, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL);
AE_CHECK_OK (AcpiInstallGpeHandler, Status);
@@ -653,6 +670,10 @@ AeMiscellaneousTests (
AfInstallGpeBlock ();
+ /* Here is where the GPEs are actually "enabled" */
+
+ Status = AcpiUpdateAllGpes ();
+ AE_CHECK_OK (AcpiUpdateAllGpes, Status);
Status = AcpiGetHandle (NULL, "RSRC", &Handle);
if (ACPI_SUCCESS (Status))
diff --git a/tools/acpiexec/aehandlers.c b/tools/acpiexec/aehandlers.c
index 1f9b1f6ec125..da57140bbd78 100644
--- a/tools/acpiexec/aehandlers.c
+++ b/tools/acpiexec/aehandlers.c
@@ -428,13 +428,18 @@ AeTableHandler (
void *Table,
void *Context)
{
+ ACPI_STATUS Status;
+
if (Event > ACPI_NUM_TABLE_EVENTS)
{
Event = ACPI_NUM_TABLE_EVENTS;
}
- /* TBD: could dump entire table header, need a header dump routine */
+ /* Enable any GPEs associated with newly-loaded GPE methods */
+
+ Status = AcpiUpdateAllGpes ();
+ AE_CHECK_OK (AcpiUpdateAllGpes, Status);
printf ("[AcpiExec] Table Event %s, [%4.4s] %p\n",
TableEvents[Event], ((ACPI_TABLE_HEADER *) Table)->Signature, Table);
@@ -446,16 +451,61 @@ AeTableHandler (
*
* FUNCTION: AeGpeHandler
*
- * DESCRIPTION: GPE handler for acpiexec
+ * DESCRIPTION: Common GPE handler for acpiexec
*
*****************************************************************************/
UINT32
AeGpeHandler (
+ ACPI_HANDLE GpeDevice,
+ UINT32 GpeNumber,
void *Context)
{
- AcpiOsPrintf ("Received a GPE at handler\n");
- return (0);
+ ACPI_NAMESPACE_NODE *DeviceNode = (ACPI_NAMESPACE_NODE *) GpeDevice;
+
+
+ AcpiOsPrintf ("[AcpiExec] GPE Handler received GPE%02X (GPE block %4.4s)\n",
+ GpeNumber, GpeDevice ? DeviceNode->Name.Ascii : "FADT");
+
+ return (ACPI_REENABLE_GPE);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION: AeGlobalEventHandler
+ *
+ * DESCRIPTION: Global GPE/Fixed event handler
+ *
+ *****************************************************************************/
+
+void
+AeGlobalEventHandler (
+ UINT32 Type,
+ ACPI_HANDLE Device,
+ UINT32 EventNumber,
+ void *Context)
+{
+ char *TypeName;
+
+
+ switch (Type)
+ {
+ case ACPI_EVENT_TYPE_GPE:
+ TypeName = "GPE";
+ break;
+
+ case ACPI_EVENT_TYPE_FIXED:
+ TypeName = "FixedEvent";
+ break;
+
+ default:
+ TypeName = "UNKNOWN";
+ break;
+ }
+
+ AcpiOsPrintf ("[AcpiExec] Global Event Handler received: Type %s Number %.2X Dev %p\n",
+ TypeName, EventNumber, Device);
}