diff options
author | njl <njl@FreeBSD.org> | 2008-01-12 22:13:12 +0000 |
---|---|---|
committer | njl <njl@FreeBSD.org> | 2008-01-12 22:13:12 +0000 |
commit | 5c93ec4f5c145977a979a171fbeec496adea1d4c (patch) | |
tree | 5f94fc13c19f2f5b0b9732fd7dde2ad89277fb37 /sys/contrib | |
parent | 74b2511ef1200c90d852be6ec896e0196ae28f8c (diff) | |
parent | cec3f46f5f61173a687aa7e171b0ac680707a164 (diff) | |
download | FreeBSD-src-5c93ec4f5c145977a979a171fbeec496adea1d4c.zip FreeBSD-src-5c93ec4f5c145977a979a171fbeec496adea1d4c.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r175256,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'sys/contrib')
-rw-r--r-- | sys/contrib/dev/acpica/evgpe.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/sys/contrib/dev/acpica/evgpe.c b/sys/contrib/dev/acpica/evgpe.c index e470eae..d18a1d7 100644 --- a/sys/contrib/dev/acpica/evgpe.c +++ b/sys/contrib/dev/acpica/evgpe.c @@ -123,6 +123,10 @@ /* Local prototypes */ +static void +AcpiEvAsynchEnableGpe ( + void *Context); + static void ACPI_SYSTEM_XFACE AcpiEvAsynchExecuteGpeMethod ( void *Context); @@ -684,14 +688,26 @@ AcpiEvAsynchExecuteGpeMethod ( } } - if ((LocalGpeEventInfo.Flags & ACPI_GPE_XRUPT_TYPE_MASK) == + /* Defer enabling of GPE until all notify handlers are done */ + AcpiOsExecute(OSL_NOTIFY_HANDLER, AcpiEvAsynchEnableGpe, GpeEventInfo); + return_VOID; +} + +static void +AcpiEvAsynchEnableGpe ( + void *Context) +{ + ACPI_GPE_EVENT_INFO *GpeEventInfo = (void *) Context; + ACPI_STATUS Status; + + if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_LEVEL_TRIGGERED) { /* * GPE is level-triggered, we clear the GPE status bit after * handling the event. */ - Status = AcpiHwClearGpe (&LocalGpeEventInfo); + Status = AcpiHwClearGpe (GpeEventInfo); if (ACPI_FAILURE (Status)) { return_VOID; @@ -700,7 +716,7 @@ AcpiEvAsynchExecuteGpeMethod ( /* Enable this GPE */ - (void) AcpiHwWriteGpeEnableReg (&LocalGpeEventInfo); + (void) AcpiHwWriteGpeEnableReg (GpeEventInfo); return_VOID; } |