evmisc.c revision 450d696485d078017a0c7d3eef7384ee79c9f467
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Module Name: evmisc - Miscellaneous event manager support functions
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller * $Revision: 84 $
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *****************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 1. Copyright Notice
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * All rights reserved.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 2. License
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 2.1. This is your license from Intel Corp. under its intellectual property
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * rights. You may have additional license terms from the party that provided
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * you this software, covering your right to use that party's intellectual
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * property rights.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * copy of the source code appearing in this file ("Covered Code") an
37c999796383567df3db1f9d2a09942d83d413caChad Kienle * irrevocable, perpetual, worldwide license under Intel's copyrights in the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * base code distributed originally by Intel ("Original Intel Code") to copy,
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle * make derivatives, distribute, use and display any portion of the Covered
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle * Code in any form, with the right to sublicense such rights; and
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle *
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle * license (with the right to sublicense), under only those claims of Intel
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * patents that are infringed by the Original Intel Code, to make, use, sell,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * offer to sell, and import the Covered Code and derivative works thereof
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * solely to the minimum extent necessary to exercise the above copyright
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * license, and in no event shall the patent license extend to any additions
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * to or modifications of the Original Intel Code. No other license or right
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * is granted directly or by implication, estoppel or otherwise;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * The above copyright and patent license is granted only if the following
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * conditions are met:
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 3. Conditions
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 3.1. Redistribution of Source with Rights to Further Distribute Source.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Redistribution of source code of any substantial portion of the Covered
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Code or modification with rights to further distribute source must include
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * the above Copyright Notice, the above License, this list of Conditions,
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle * and the following Disclaimer and Export Compliance provision. In addition,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Licensee must cause all Covered Code to which Licensee contributes to
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * contain a file documenting the changes Licensee made to create that Covered
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Code and the date of any change. Licensee must include in that file the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * documentation of any changes made by any predecessor Licensee. Licensee
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * must include a prominent statement that the modification is derived,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * directly or indirectly, from Original Intel Code.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Redistribution of source code of any substantial portion of the Covered
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Code or modification without rights to further distribute source must
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle * include the following Disclaimer and Export Compliance provision in the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * documentation and/or other materials provided with distribution. In
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * addition, Licensee may not authorize further sublicense of source of any
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * portion of the Covered Code, and must include terms to the effect that the
37c999796383567df3db1f9d2a09942d83d413caChad Kienle * license from Licensee to its licensee is limited to the intellectual
37c999796383567df3db1f9d2a09942d83d413caChad Kienle * property embodied in the software Licensee provides to its licensee, and
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * not to intellectual property embodied in modifications its licensee may
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * make.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 3.3. Redistribution of Executable. Redistribution in executable form of any
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * substantial portion of the Covered Code or modification must reproduce the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * above Copyright Notice, and the following Disclaimer and Export Compliance
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * provision in the documentation and/or other materials provided with the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * distribution.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 3.4. Intel retains all right, title, and interest in and to the Original
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Intel Code.
505a315052c2c6b495cb3228847d7d33d17458d1Jim Mitchener *
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener * 3.5. Neither the name Intel nor any other trademark owned or controlled by
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener * Intel shall be used in advertising or otherwise to promote the sale, use or
505a315052c2c6b495cb3228847d7d33d17458d1Jim Mitchener * other dealings in products derived from or relating to the Covered Code
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller * without prior written authorization from Intel.
1e7cf46779cd3edd805fffdd3e5c3c8f5d36a75cBrendan Mmiller *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 4. Disclaimer and Export Compliance
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARTICULAR PURPOSE.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * LIMITED REMEDY.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * 4.3. Licensee shall not export, either directly or indirectly, any of this
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * software or system incorporating such software without first obtaining any
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * required license or other approval from the U. S. Department of Commerce or
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * any other agency or department of the United States Government. In the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * event Licensee exports any such software from the United States or
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * re-exports any such software from a foreign destination, Licensee shall
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * ensure that the distribution and export/re-export of the software is in
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * compliance with all laws, regulations, orders, or other restrictions of the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * U.S. Export Administration Regulations. Licensee agrees that neither it nor
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * any of its subsidiaries will export/re-export any technical data, process,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * software, or service, directly or indirectly, to any country for which the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * United States government or any agency thereof requires an export license,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * other governmental approval, or letter of assurance, without first obtaining
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * such license, approval or letter.
117941f80637bf0fe66cbb3a444430ef88f629a7Jim Mitchener *
117941f80637bf0fe66cbb3a444430ef88f629a7Jim Mitchener *****************************************************************************/
117941f80637bf0fe66cbb3a444430ef88f629a7Jim Mitchener
117941f80637bf0fe66cbb3a444430ef88f629a7Jim Mitchener#include "acpi.h"
117941f80637bf0fe66cbb3a444430ef88f629a7Jim Mitchener#include "acevents.h"
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller#include "acnamesp.h"
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller#include "acinterp.h"
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller#define _COMPONENT ACPI_EVENTS
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller ACPI_MODULE_NAME ("evmisc")
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller#ifdef ACPI_DEBUG_OUTPUT
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmillerstatic const char *AcpiNotifyValueNames[] =
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller{
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller "Bus Check",
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller "Device Check",
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller "Device Wake",
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller "Eject request",
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller "Device Check Light",
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller "Frequency Mismatch",
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller "Bus Mode Mismatch",
a17f398e6526e91a7a3df8dbe0e7f8dd1e8e581dBrendan Mmiller "Power Fault"
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle};
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle#endif
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/* Local prototypes */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienlestatic void ACPI_SYSTEM_XFACE
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvNotifyDispatch (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void *Context);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienlestatic void ACPI_SYSTEM_XFACE
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvGlobalLockThread (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void *Context);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienlestatic UINT32
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvGlobalLockHandler (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void *Context);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/*******************************************************************************
1e7cf46779cd3edd805fffdd3e5c3c8f5d36a75cBrendan Mmiller *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvIsNotifyObject
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: Node - Node to check
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * RETURN: TRUE if notifies allowed on this object
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * DESCRIPTION: Check type of node for a object that supports notifies.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * TBD: This could be replaced by a flag bit in the node.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ******************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleBOOLEAN
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvIsNotifyObject (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_NAMESPACE_NODE *Node)
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener{
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener switch (Node->Type)
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener {
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener case ACPI_TYPE_DEVICE:
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener case ACPI_TYPE_PROCESSOR:
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener case ACPI_TYPE_POWER:
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener case ACPI_TYPE_THERMAL:
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * These are the ONLY objects that can receive ACPI notifications
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return (TRUE);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle default:
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return (FALSE);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle}
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/*******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvQueueNotifyRequest
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: Node - NS node for the notified object
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * NotifyValue - Value from the Notify() request
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * RETURN: Status
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * DESCRIPTION: Dispatch a device notification event to a previously
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * installed handler.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ******************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleACPI_STATUS
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvQueueNotifyRequest (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_NAMESPACE_NODE *Node,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle UINT32 NotifyValue)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle{
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_OPERAND_OBJECT *ObjDesc;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_OPERAND_OBJECT *HandlerObj = NULL;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_GENERIC_STATE *NotifyInfo;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_STATUS Status = AE_OK;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_FUNCTION_NAME ("EvQueueNotifyRequest");
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
a1d206a2a22b5cde9b00633ea4472ae0b144d695Brendan Mmiller /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * For value 3 (Ejection Request), some device method may need to be run.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * For value 2 (Device Wake) if _PRW exists, the _PS0 method may need
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * to be run.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * For value 0x80 (Status Change) on the power button or sleep button,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * initiate soft-off or sleep operation?
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle "Dispatching Notify(%X) on node %p\n", NotifyValue, Node));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (NotifyValue <= 7)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: %s\n",
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiNotifyValueNames[NotifyValue]));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle else
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle "Notify value: 0x%2.2X **Device Specific**\n",
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle NotifyValue));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
a1d206a2a22b5cde9b00633ea4472ae0b144d695Brendan Mmiller
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Get the notify object attached to the NS Node */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ObjDesc = AcpiNsGetAttachedObject (Node);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (ObjDesc)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* We have the notify object, Get the right handler */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle switch (Node->Type)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle case ACPI_TYPE_DEVICE:
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle case ACPI_TYPE_THERMAL:
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle case ACPI_TYPE_PROCESSOR:
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle case ACPI_TYPE_POWER:
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (NotifyValue <= ACPI_MAX_SYS_NOTIFY)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle HandlerObj = ObjDesc->CommonNotify.SystemNotify;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle else
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle HandlerObj = ObjDesc->CommonNotify.DeviceNotify;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle break;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle default:
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* All other types are not supported */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return (AE_TYPE);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* If there is any handler to run, schedule the dispatcher */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if ((AcpiGbl_SystemNotify.Handler && (NotifyValue <= ACPI_MAX_SYS_NOTIFY)) ||
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle (AcpiGbl_DeviceNotify.Handler && (NotifyValue > ACPI_MAX_SYS_NOTIFY)) ||
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle HandlerObj)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle NotifyInfo = AcpiUtCreateGenericState ();
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (!NotifyInfo)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return (AE_NO_MEMORY);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle NotifyInfo->Common.DataType = ACPI_DESC_TYPE_STATE_NOTIFY;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle NotifyInfo->Notify.Node = Node;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle NotifyInfo->Notify.Value = (UINT16) NotifyValue;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle NotifyInfo->Notify.HandlerObj = HandlerObj;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle Status = AcpiOsQueueForExecution (OSD_PRIORITY_HIGH,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiEvNotifyDispatch, NotifyInfo);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (ACPI_FAILURE (Status))
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiUtDeleteGenericState (NotifyInfo);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (!HandlerObj)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * There is no per-device notify handler for this device.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * This may or may not be a problem.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle "No notify handler for Notify(%4.4s, %X) node %p\n",
9f1e7c4b37140496d6fb5ad0a3ae507e4f9db37cAndi Egloff AcpiUtGetNodeName (Node), NotifyValue, Node));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return (Status);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle}
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/*******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvNotifyDispatch
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: Context - To be passed to the notify handler
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * RETURN: None.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * DESCRIPTION: Dispatch a device notification event to a previously
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * installed handler.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ******************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienlestatic void ACPI_SYSTEM_XFACE
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvNotifyDispatch (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void *Context)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle{
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_GENERIC_STATE *NotifyInfo = (ACPI_GENERIC_STATE *) Context;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_NOTIFY_HANDLER GlobalHandler = NULL;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void *GlobalContext = NULL;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_OPERAND_OBJECT *HandlerObj;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_FUNCTION_ENTRY ();
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * We will invoke a global notify handler if installed.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * This is done _before_ we invoke the per-device handler attached
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * to the device.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (NotifyInfo->Notify.Value <= ACPI_MAX_SYS_NOTIFY)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Global system notification handler */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (AcpiGbl_SystemNotify.Handler)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle GlobalHandler = AcpiGbl_SystemNotify.Handler;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle GlobalContext = AcpiGbl_SystemNotify.Context;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle else
5848ca5e742e748dfd18fc53d810fa017949f809Jim Mitchener {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Global driver notification handler */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (AcpiGbl_DeviceNotify.Handler)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle GlobalHandler = AcpiGbl_DeviceNotify.Handler;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle GlobalContext = AcpiGbl_DeviceNotify.Context;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Invoke the system handler first, if present */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (GlobalHandler)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle GlobalHandler (NotifyInfo->Notify.Node, NotifyInfo->Notify.Value,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle GlobalContext);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Now invoke the per-device handler, if present */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle HandlerObj = NotifyInfo->Notify.HandlerObj;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (HandlerObj)
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle HandlerObj->Notify.Handler (NotifyInfo->Notify.Node,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle NotifyInfo->Notify.Value,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle HandlerObj->Notify.Context);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* All done with the info object */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiUtDeleteGenericState (NotifyInfo);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle}
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/*******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvGlobalLockThread
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: Context - From thread interface, not used
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * RETURN: None
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * DESCRIPTION: Invoked by SCI interrupt handler upon acquisition of the
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Global Lock. Simply signal all threads that are waiting
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * for the lock.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ******************************************************************************/
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienlestatic void ACPI_SYSTEM_XFACE
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvGlobalLockThread (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void *Context)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle{
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_STATUS Status;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Signal threads that are waiting for the lock */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (AcpiGbl_GlobalLockThreadCount)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Send sufficient units to the semaphore */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle Status = AcpiOsSignalSemaphore (AcpiGbl_GlobalLockSemaphore,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiGbl_GlobalLockThreadCount);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (ACPI_FAILURE (Status))
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_REPORT_ERROR (("Could not signal Global Lock semaphore\n"));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle}
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/*******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvGlobalLockHandler
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: Context - From thread interface, not used
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * RETURN: ACPI_INTERRUPT_HANDLED or ACPI_INTERRUPT_NOT_HANDLED
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * DESCRIPTION: Invoked directly from the SCI handler when a global lock
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * release interrupt occurs. Grab the global lock and queue
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * the global lock thread for execution
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ******************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienlestatic UINT32
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvGlobalLockHandler (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void *Context)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle{
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle BOOLEAN Acquired = FALSE;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_STATUS Status;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Attempt to get the lock
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * If we don't get it now, it will be marked pending and we will
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * take another interrupt when it becomes free.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_ACQUIRE_GLOBAL_LOCK (AcpiGbl_CommonFACS.GlobalLock, Acquired);
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller if (Acquired)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Got the lock, now wake all threads waiting for it */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiGbl_GlobalLockAcquired = TRUE;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Run the Global Lock thread which will signal all waiting threads */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle Status = AcpiOsQueueForExecution (OSD_PRIORITY_HIGH,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiEvGlobalLockThread, Context);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (ACPI_FAILURE (Status))
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_REPORT_ERROR (("Could not queue Global Lock thread, %s\n",
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiFormatException (Status)));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return (ACPI_INTERRUPT_NOT_HANDLED);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return (ACPI_INTERRUPT_HANDLED);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle}
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/*******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvInitGlobalLockHandler
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: None
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * RETURN: Status
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * DESCRIPTION: Install a handler for the global lock release event
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ******************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleACPI_STATUS
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvInitGlobalLockHandler (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle{
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_STATUS Status;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_FUNCTION_TRACE ("EvInitGlobalLockHandler");
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiGbl_GlobalLockPresent = TRUE;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle Status = AcpiInstallFixedEventHandler (ACPI_EVENT_GLOBAL,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiEvGlobalLockHandler, NULL);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * If the global lock does not exist on this platform, the attempt
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * to enable GBL_STATUS will fail (the GBL_ENABLE bit will not stick)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Map to AE_OK, but mark global lock as not present.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Any attempt to actually use the global lock will be flagged
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * with an error.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (Status == AE_NO_HARDWARE_RESPONSE)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiGbl_GlobalLockPresent = FALSE;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle Status = AE_OK;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return_ACPI_STATUS (Status);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle}
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvAcquireGlobalLock
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: Timeout - Max time to wait for the lock, in millisec.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * RETURN: Status
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * DESCRIPTION: Attempt to gain ownership of the Global Lock.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *****************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleACPI_STATUS
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvAcquireGlobalLock (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle UINT16 Timeout)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle{
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_STATUS Status = AE_OK;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle BOOLEAN Acquired = FALSE;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_FUNCTION_TRACE ("EvAcquireGlobalLock");
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle#ifndef ACPI_APPLICATION
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* Make sure that we actually have a global lock */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (!AcpiGbl_GlobalLockPresent)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return_ACPI_STATUS (AE_NO_GLOBAL_LOCK);
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle#endif
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* One more thread wants the global lock */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiGbl_GlobalLockThreadCount++;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * If we (OS side vs. BIOS side) have the hardware lock already,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * we are done
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (AcpiGbl_GlobalLockAcquired)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return_ACPI_STATUS (AE_OK);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* We must acquire the actual hardware lock */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller ACPI_ACQUIRE_GLOBAL_LOCK (AcpiGbl_CommonFACS.GlobalLock, Acquired);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (Acquired)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* We got the lock */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Acquired the HW Global Lock\n"));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiGbl_GlobalLockAcquired = TRUE;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return_ACPI_STATUS (AE_OK);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Did not get the lock. The pending bit was set above, and we must now
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * wait until we get the global lock released interrupt.
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Waiting for the HW Global Lock\n"));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Acquire the global lock semaphore first.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * Since this wait will block, we must release the interpreter
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle Status = AcpiExSystemWaitSemaphore (AcpiGbl_GlobalLockSemaphore,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle Timeout);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return_ACPI_STATUS (Status);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle}
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/*******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvReleaseGlobalLock
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: None
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * RETURN: Status
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * DESCRIPTION: Releases ownership of the Global Lock.
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ******************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleACPI_STATUS
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvReleaseGlobalLock (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle{
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle BOOLEAN Pending = FALSE;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_STATUS Status = AE_OK;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_FUNCTION_TRACE ("EvReleaseGlobalLock");
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (!AcpiGbl_GlobalLockThreadCount)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_REPORT_WARNING((
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle "Cannot release HW Global Lock, it has not been acquired\n"));
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return_ACPI_STATUS (AE_NOT_ACQUIRED);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* One fewer thread has the global lock */
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiGbl_GlobalLockThreadCount--;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (AcpiGbl_GlobalLockThreadCount)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /* There are still some threads holding the lock, cannot release */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return_ACPI_STATUS (AE_OK);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * No more threads holding lock, we can do the actual hardware
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * release
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_RELEASE_GLOBAL_LOCK (AcpiGbl_CommonFACS.GlobalLock, Pending);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle AcpiGbl_GlobalLockAcquired = FALSE;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle /*
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * If the pending bit was set, we must write GBL_RLS to the control
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * register
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle */
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle if (Pending)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle {
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle Status = AcpiSetRegister (ACPI_BITREG_GLOBAL_LOCK_RELEASE,
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle 1, ACPI_MTX_LOCK);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle }
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle return_ACPI_STATUS (Status);
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle}
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle/******************************************************************************
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * FUNCTION: AcpiEvTerminate
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle * PARAMETERS: none
79d12e9411155c9e79c08df9bb6412b2862e6064Brendan Mmiller *
79d12e9411155c9e79c08df9bb6412b2862e6064Brendan Mmiller * RETURN: none
79d12e9411155c9e79c08df9bb6412b2862e6064Brendan Mmiller *
79d12e9411155c9e79c08df9bb6412b2862e6064Brendan Mmiller * DESCRIPTION: Disable events and free memory allocated for table storage.
79d12e9411155c9e79c08df9bb6412b2862e6064Brendan Mmiller *
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ******************************************************************************/
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienlevoid
37f9df7d5b474a12668813f98992dceb7c7feacbChad KienleAcpiEvTerminate (
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle void)
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle{
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_NATIVE_UINT i;
37f9df7d5b474a12668813f98992dceb7c7feacbChad Kienle ACPI_STATUS Status;
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller ACPI_FUNCTION_TRACE ("EvTerminate");
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller if (AcpiGbl_EventsInitialized)
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller {
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller /*
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller * Disable all event-related functionality.
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle * In all cases, on error, print a message but obviously we don't abort.
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller */
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller /* Disable all fixed events */
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller {
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller Status = AcpiDisableEvent ((UINT32) i, 0);
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller if (ACPI_FAILURE (Status))
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller {
0743258ac0c62d8717cc7765bca394618e64af0fBrendan Mmiller ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller "Could not disable fixed event %d\n", (UINT32) i));
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller }
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller }
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller /* Disable all GPEs in all GPE blocks */
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller Status = AcpiEvWalkGpeList (AcpiHwDisableGpeBlock);
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller /* Remove SCI handler */
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller Status = AcpiEvRemoveSciHandler ();
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller if (ACPI_FAILURE(Status))
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller {
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller "Could not remove SCI handler\n"));
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller }
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller }
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller /* Deallocate all handler objects installed within GPE info structs */
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller Status = AcpiEvWalkGpeList (AcpiEvDeleteGpeHandlers);
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller /* Return to original mode if necessary */
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle if (AcpiGbl_OriginalMode == ACPI_SYS_MODE_LEGACY)
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller {
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle Status = AcpiDisable ();
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller if (ACPI_FAILURE (Status))
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle {
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "AcpiDisable failed\n"));
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle }
a32c32954ffe171a0437ff1bc1287e9086f0bd26Chad Kienle }
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller return_VOID;
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller}
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller
5c6fc9459842796234027c8bb8f58886d69ebc8fBrendan Mmiller