diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2010-12-09 20:04:14 +0000 |
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2010-12-09 20:04:14 +0000 |
| commit | 0f70714e43f23ff5f3e72fa406814e26bdad006a (patch) | |
| tree | c88f8fbca7e5c63afb07147d504c55311683cb5d /tools/acpiexec | |
| parent | 11641cd290cbb4765d39dadd5a4eee278b8769ee (diff) | |
Notes
Diffstat (limited to 'tools/acpiexec')
| -rw-r--r-- | tools/acpiexec/Makefile | 4 | ||||
| -rw-r--r-- | tools/acpiexec/aecommon.h | 9 | ||||
| -rw-r--r-- | tools/acpiexec/aeexec.c | 21 | ||||
| -rw-r--r-- | tools/acpiexec/aehandlers.c | 58 |
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); } |
