diff options
Diffstat (limited to 'source/components/utilities')
| -rw-r--r-- | source/components/utilities/utosi.c | 1 | ||||
| -rw-r--r-- | source/components/utilities/utxface.c | 406 | ||||
| -rw-r--r-- | source/components/utilities/utxferror.c | 4 | ||||
| -rw-r--r-- | source/components/utilities/utxfinit.c | 358 | 
4 files changed, 457 insertions, 312 deletions
| diff --git a/source/components/utilities/utosi.c b/source/components/utilities/utosi.c index dcce8a99e18ac..a1ff84521e95d 100644 --- a/source/components/utilities/utosi.c +++ b/source/components/utilities/utosi.c @@ -77,6 +77,7 @@ static ACPI_INTERFACE_INFO    AcpiDefaultSupportedInterfaces[] =      {"Windows 2006 SP1",    NULL, 0, ACPI_OSI_WIN_VISTA_SP1},    /* Windows Vista SP1 - Added 09/2009 */      {"Windows 2006 SP2",    NULL, 0, ACPI_OSI_WIN_VISTA_SP2},    /* Windows Vista SP2 - Added 09/2010 */      {"Windows 2009",        NULL, 0, ACPI_OSI_WIN_7},            /* Windows 7 and Server 2008 R2 - Added 09/2009 */ +    {"Windows 2012",        NULL, 0, ACPI_OSI_WIN_8},            /* Windows 8 and Server 2012 - Added 08/2012 */      /* Feature Group Strings */ diff --git a/source/components/utilities/utxface.c b/source/components/utilities/utxface.c index 3e858c9b0ffea..38f7195769ab3 100644 --- a/source/components/utilities/utxface.c +++ b/source/components/utilities/utxface.c @@ -1,6 +1,6 @@  /******************************************************************************   * - * Module Name: utxface - External interfaces for "global" ACPI functions + * Module Name: utxface - External interfaces, miscellaneous utility functions   *   *****************************************************************************/ @@ -46,321 +46,12 @@  #include "acpi.h"  #include "accommon.h" -#include "acevents.h" -#include "acnamesp.h"  #include "acdebug.h" -#include "actables.h"  #define _COMPONENT          ACPI_UTILITIES          ACPI_MODULE_NAME    ("utxface") -#ifndef ACPI_ASL_COMPILER -/******************************************************************************* - * - * FUNCTION:    AcpiInitializeSubsystem - * - * PARAMETERS:  None - * - * RETURN:      Status - * - * DESCRIPTION: Initializes all global variables.  This is the first function - *              called, so any early initialization belongs here. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInitializeSubsystem ( -    void) -{ -    ACPI_STATUS             Status; - - -    ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem); - - -    AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE; -    ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ()); - -    /* Initialize the OS-Dependent layer */ - -    Status = AcpiOsInitialize (); -    if (ACPI_FAILURE (Status)) -    { -        ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization")); -        return_ACPI_STATUS (Status); -    } - -    /* Initialize all globals used by the subsystem */ - -    Status = AcpiUtInitGlobals (); -    if (ACPI_FAILURE (Status)) -    { -        ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals")); -        return_ACPI_STATUS (Status); -    } - -    /* Create the default mutex objects */ - -    Status = AcpiUtMutexInitialize (); -    if (ACPI_FAILURE (Status)) -    { -        ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation")); -        return_ACPI_STATUS (Status); -    } - -    /* -     * Initialize the namespace manager and -     * the root of the namespace tree -     */ -    Status = AcpiNsRootInitialize (); -    if (ACPI_FAILURE (Status)) -    { -        ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization")); -        return_ACPI_STATUS (Status); -    } - -    /* Initialize the global OSI interfaces list with the static names */ - -    Status = AcpiUtInitializeInterfaces (); -    if (ACPI_FAILURE (Status)) -    { -        ACPI_EXCEPTION ((AE_INFO, Status, "During OSI interfaces initialization")); -        return_ACPI_STATUS (Status); -    } - -    /* If configured, initialize the AML debugger */ - -    ACPI_DEBUGGER_EXEC (Status = AcpiDbInitialize ()); -    return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInitializeSubsystem) - - -/******************************************************************************* - * - * FUNCTION:    AcpiEnableSubsystem - * - * PARAMETERS:  Flags           - Init/enable Options - * - * RETURN:      Status - * - * DESCRIPTION: Completes the subsystem initialization including hardware. - *              Puts system into ACPI mode if it isn't already. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiEnableSubsystem ( -    UINT32                  Flags) -{ -    ACPI_STATUS             Status = AE_OK; - - -    ACPI_FUNCTION_TRACE (AcpiEnableSubsystem); - - -#if (!ACPI_REDUCED_HARDWARE) - -    /* Enable ACPI mode */ - -    if (!(Flags & ACPI_NO_ACPI_ENABLE)) -    { -        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n")); - -        AcpiGbl_OriginalMode = AcpiHwGetMode(); - -        Status = AcpiEnable (); -        if (ACPI_FAILURE (Status)) -        { -            ACPI_WARNING ((AE_INFO, "AcpiEnable failed")); -            return_ACPI_STATUS (Status); -        } -    } - -    /* -     * Obtain a permanent mapping for the FACS. This is required for the -     * Global Lock and the Firmware Waking Vector -     */ -    Status = AcpiTbInitializeFacs (); -    if (ACPI_FAILURE (Status)) -    { -        ACPI_WARNING ((AE_INFO, "Could not map the FACS table")); -        return_ACPI_STATUS (Status); -    } - -#endif /* !ACPI_REDUCED_HARDWARE */ - -    /* -     * Install the default OpRegion handlers.  These are installed unless -     * other handlers have already been installed via the -     * InstallAddressSpaceHandler interface. -     */ -    if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT)) -    { -        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, -            "[Init] Installing default address space handlers\n")); - -        Status = AcpiEvInstallRegionHandlers (); -        if (ACPI_FAILURE (Status)) -        { -            return_ACPI_STATUS (Status); -        } -    } - -#if (!ACPI_REDUCED_HARDWARE) -    /* -     * Initialize ACPI Event handling (Fixed and General Purpose) -     * -     * Note1: We must have the hardware and events initialized before we can -     * execute any control methods safely. Any control method can require -     * ACPI hardware support, so the hardware must be fully initialized before -     * any method execution! -     * -     * Note2: Fixed events are initialized and enabled here. GPEs are -     * initialized, but cannot be enabled until after the hardware is -     * completely initialized (SCI and GlobalLock activated) and the various -     * initialization control methods are run (_REG, _STA, _INI) on the -     * entire namespace. -     */ -    if (!(Flags & ACPI_NO_EVENT_INIT)) -    { -        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, -            "[Init] Initializing ACPI events\n")); - -        Status = AcpiEvInitializeEvents (); -        if (ACPI_FAILURE (Status)) -        { -            return_ACPI_STATUS (Status); -        } -    } - -    /* -     * Install the SCI handler and Global Lock handler. This completes the -     * hardware initialization. -     */ -    if (!(Flags & ACPI_NO_HANDLER_INIT)) -    { -        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, -            "[Init] Installing SCI/GL handlers\n")); - -        Status = AcpiEvInstallXruptHandlers (); -        if (ACPI_FAILURE (Status)) -        { -            return_ACPI_STATUS (Status); -        } -    } - -#endif /* !ACPI_REDUCED_HARDWARE */ - -    return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiEnableSubsystem) - - -/******************************************************************************* - * - * FUNCTION:    AcpiInitializeObjects - * - * PARAMETERS:  Flags           - Init/enable Options - * - * RETURN:      Status - * - * DESCRIPTION: Completes namespace initialization by initializing device - *              objects and executing AML code for Regions, buffers, etc. - * - ******************************************************************************/ - -ACPI_STATUS -AcpiInitializeObjects ( -    UINT32                  Flags) -{ -    ACPI_STATUS             Status = AE_OK; - - -    ACPI_FUNCTION_TRACE (AcpiInitializeObjects); - - -    /* -     * Run all _REG methods -     * -     * Note: Any objects accessed by the _REG methods will be automatically -     * initialized, even if they contain executable AML (see the call to -     * AcpiNsInitializeObjects below). -     */ -    if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT)) -    { -        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, -            "[Init] Executing _REG OpRegion methods\n")); - -        Status = AcpiEvInitializeOpRegions (); -        if (ACPI_FAILURE (Status)) -        { -            return_ACPI_STATUS (Status); -        } -    } - -    /* -     * Execute any module-level code that was detected during the table load -     * phase. Although illegal since ACPI 2.0, there are many machines that -     * contain this type of code. Each block of detected executable AML code -     * outside of any control method is wrapped with a temporary control -     * method object and placed on a global list. The methods on this list -     * are executed below. -     */ -    AcpiNsExecModuleCodeList (); - -    /* -     * Initialize the objects that remain uninitialized. This runs the -     * executable AML that may be part of the declaration of these objects: -     * OperationRegions, BufferFields, Buffers, and Packages. -     */ -    if (!(Flags & ACPI_NO_OBJECT_INIT)) -    { -        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, -            "[Init] Completing Initialization of ACPI Objects\n")); - -        Status = AcpiNsInitializeObjects (); -        if (ACPI_FAILURE (Status)) -        { -            return_ACPI_STATUS (Status); -        } -    } - -    /* -     * Initialize all device objects in the namespace. This runs the device -     * _STA and _INI methods. -     */ -    if (!(Flags & ACPI_NO_DEVICE_INIT)) -    { -        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, -            "[Init] Initializing ACPI Devices\n")); - -        Status = AcpiNsInitializeDevices (); -        if (ACPI_FAILURE (Status)) -        { -            return_ACPI_STATUS (Status); -        } -    } - -    /* -     * Empty the caches (delete the cached objects) on the assumption that -     * the table load filled them up more than they will be at runtime -- -     * thus wasting non-paged memory. -     */ -    Status = AcpiPurgeCachedObjects (); - -    AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK; -    return_ACPI_STATUS (Status); -} - -ACPI_EXPORT_SYMBOL (AcpiInitializeObjects) - - -#endif -  /*******************************************************************************   *   * FUNCTION:    AcpiTerminate @@ -835,3 +526,98 @@ AcpiCheckAddressRange (  ACPI_EXPORT_SYMBOL (AcpiCheckAddressRange)  #endif /* !ACPI_ASL_COMPILER */ + + +/******************************************************************************* + * + * FUNCTION:    AcpiDecodePldBuffer + * + * PARAMETERS:  InBuffer            - Buffer returned by _PLD method + *              Length              - Length of the InBuffer + *              ReturnBuffer        - Where the decode buffer is returned + * + * RETURN:      Status and the decoded _PLD buffer. User must deallocate + *              the buffer via ACPI_FREE. + * + * DESCRIPTION: Decode the bit-packed buffer returned by the _PLD method into + *              a local struct that is much more useful to an ACPI driver. + * + ******************************************************************************/ + +ACPI_STATUS +AcpiDecodePldBuffer ( +    UINT8                   *InBuffer, +    ACPI_SIZE               Length, +    ACPI_PLD_INFO           **ReturnBuffer) +{ +    ACPI_PLD_INFO           *PldInfo; +    UINT32                  *Buffer = ACPI_CAST_PTR (UINT32, InBuffer); +    UINT32                  Dword; + + +    /* Parameter validation */ + +    if (!InBuffer || !ReturnBuffer || (Length < 16)) +    { +        return (AE_BAD_PARAMETER); +    } + +    PldInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PLD_INFO)); +    if (!PldInfo) +    { +        return (AE_NO_MEMORY); +    } + +    /* First 32-bit DWord */ + +    ACPI_MOVE_32_TO_32 (&Dword, &Buffer[0]); +    PldInfo->Revision =             ACPI_PLD_GET_REVISION (&Dword); +    PldInfo->IgnoreColor =          ACPI_PLD_GET_IGNORE_COLOR (&Dword); +    PldInfo->Color =                ACPI_PLD_GET_COLOR (&Dword); + +    /* Second 32-bit DWord */ + +    ACPI_MOVE_32_TO_32 (&Dword, &Buffer[1]); +    PldInfo->Width =                ACPI_PLD_GET_WIDTH (&Dword); +    PldInfo->Height =               ACPI_PLD_GET_HEIGHT(&Dword); + +    /* Third 32-bit DWord */ + +    ACPI_MOVE_32_TO_32 (&Dword, &Buffer[2]); +    PldInfo->UserVisible =          ACPI_PLD_GET_USER_VISIBLE (&Dword); +    PldInfo->Dock =                 ACPI_PLD_GET_DOCK (&Dword); +    PldInfo->Lid =                  ACPI_PLD_GET_LID (&Dword); +    PldInfo->Panel =                ACPI_PLD_GET_PANEL (&Dword); +    PldInfo->VerticalPosition =     ACPI_PLD_GET_VERTICAL (&Dword); +    PldInfo->HorizontalPosition =   ACPI_PLD_GET_HORIZONTAL (&Dword); +    PldInfo->Shape =                ACPI_PLD_GET_SHAPE (&Dword); +    PldInfo->GroupOrientation =     ACPI_PLD_GET_ORIENTATION (&Dword); +    PldInfo->GroupToken =           ACPI_PLD_GET_TOKEN (&Dword); +    PldInfo->GroupPosition =        ACPI_PLD_GET_POSITION (&Dword); +    PldInfo->Bay =                  ACPI_PLD_GET_BAY (&Dword); + +    /* Fourth 32-bit DWord */ + +    ACPI_MOVE_32_TO_32 (&Dword, &Buffer[3]); +    PldInfo->Ejectable =            ACPI_PLD_GET_EJECTABLE (&Dword); +    PldInfo->OspmEjectRequired =    ACPI_PLD_GET_OSPM_EJECT (&Dword); +    PldInfo->CabinetNumber =        ACPI_PLD_GET_CABINET (&Dword); +    PldInfo->CardCageNumber =       ACPI_PLD_GET_CARD_CAGE (&Dword); +    PldInfo->Reference =            ACPI_PLD_GET_REFERENCE (&Dword); +    PldInfo->Rotation =             ACPI_PLD_GET_ROTATION (&Dword); +    PldInfo->Order =                ACPI_PLD_GET_ORDER (&Dword); + +    if (Length >= ACPI_PLD_BUFFER_SIZE) +    { +        /* Fifth 32-bit DWord (Revision 2 of _PLD) */ + +        ACPI_MOVE_32_TO_32 (&Dword, &Buffer[4]); +        PldInfo->VerticalOffset =       ACPI_PLD_GET_VERT_OFFSET (&Dword); +        PldInfo->HorizontalOffset =     ACPI_PLD_GET_HORIZ_OFFSET (&Dword); +    } + +    *ReturnBuffer = PldInfo; +    return (AE_OK); +} + +ACPI_EXPORT_SYMBOL (AcpiDecodePldBuffer) diff --git a/source/components/utilities/utxferror.c b/source/components/utilities/utxferror.c index 715c0f47f0f4d..beeb7c7ce9613 100644 --- a/source/components/utilities/utxferror.c +++ b/source/components/utilities/utxferror.c @@ -87,8 +87,8 @@ extern FILE                 *AcpiGbl_OutputFile;  #define ACPI_MSG_WARNING        "ACPI Warning: "  #define ACPI_MSG_INFO           "ACPI: " -#define ACPI_MSG_BIOS_ERROR     "ACPI Firmware Error: " -#define ACPI_MSG_BIOS_WARNING   "ACPI Firmware Warning: " +#define ACPI_MSG_BIOS_ERROR     "ACPI BIOS Bug: Error: " +#define ACPI_MSG_BIOS_WARNING   "ACPI BIOS Bug: Warning: "  /*   * Common message suffix diff --git a/source/components/utilities/utxfinit.c b/source/components/utilities/utxfinit.c new file mode 100644 index 0000000000000..733aa3b9bbfc1 --- /dev/null +++ b/source/components/utilities/utxfinit.c @@ -0,0 +1,358 @@ +/****************************************************************************** + * + * Module Name: utxfinit - External interfaces for ACPICA initialization + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 - 2012, Intel Corp. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions, and the following disclaimer, + *    without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + *    substantially similar to the "NO WARRANTY" disclaimer below + *    ("Disclaimer") and any redistribution must be conditioned upon + *    including a substantially similar Disclaimer requirement for further + *    binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + *    of any contributors may be used to endorse or promote products derived + *    from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ + + +#define __UTXFINIT_C__ + +#include "acpi.h" +#include "accommon.h" +#include "acevents.h" +#include "acnamesp.h" +#include "acdebug.h" +#include "actables.h" + +#define _COMPONENT          ACPI_UTILITIES +        ACPI_MODULE_NAME    ("utxfinit") + + +/******************************************************************************* + * + * FUNCTION:    AcpiInitializeSubsystem + * + * PARAMETERS:  None + * + * RETURN:      Status + * + * DESCRIPTION: Initializes all global variables. This is the first function + *              called, so any early initialization belongs here. + * + ******************************************************************************/ + +ACPI_STATUS +AcpiInitializeSubsystem ( +    void) +{ +    ACPI_STATUS             Status; + + +    ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem); + + +    AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE; +    ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ()); + +    /* Initialize the OS-Dependent layer */ + +    Status = AcpiOsInitialize (); +    if (ACPI_FAILURE (Status)) +    { +        ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization")); +        return_ACPI_STATUS (Status); +    } + +    /* Initialize all globals used by the subsystem */ + +    Status = AcpiUtInitGlobals (); +    if (ACPI_FAILURE (Status)) +    { +        ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals")); +        return_ACPI_STATUS (Status); +    } + +    /* Create the default mutex objects */ + +    Status = AcpiUtMutexInitialize (); +    if (ACPI_FAILURE (Status)) +    { +        ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation")); +        return_ACPI_STATUS (Status); +    } + +    /* +     * Initialize the namespace manager and +     * the root of the namespace tree +     */ +    Status = AcpiNsRootInitialize (); +    if (ACPI_FAILURE (Status)) +    { +        ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization")); +        return_ACPI_STATUS (Status); +    } + +    /* Initialize the global OSI interfaces list with the static names */ + +    Status = AcpiUtInitializeInterfaces (); +    if (ACPI_FAILURE (Status)) +    { +        ACPI_EXCEPTION ((AE_INFO, Status, "During OSI interfaces initialization")); +        return_ACPI_STATUS (Status); +    } + +    /* If configured, initialize the AML debugger */ + +    ACPI_DEBUGGER_EXEC (Status = AcpiDbInitialize ()); +    return_ACPI_STATUS (Status); +} + +ACPI_EXPORT_SYMBOL (AcpiInitializeSubsystem) + + +/******************************************************************************* + * + * FUNCTION:    AcpiEnableSubsystem + * + * PARAMETERS:  Flags               - Init/enable Options + * + * RETURN:      Status + * + * DESCRIPTION: Completes the subsystem initialization including hardware. + *              Puts system into ACPI mode if it isn't already. + * + ******************************************************************************/ + +ACPI_STATUS +AcpiEnableSubsystem ( +    UINT32                  Flags) +{ +    ACPI_STATUS             Status = AE_OK; + + +    ACPI_FUNCTION_TRACE (AcpiEnableSubsystem); + + +#if (!ACPI_REDUCED_HARDWARE) + +    /* Enable ACPI mode */ + +    if (!(Flags & ACPI_NO_ACPI_ENABLE)) +    { +        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n")); + +        AcpiGbl_OriginalMode = AcpiHwGetMode(); + +        Status = AcpiEnable (); +        if (ACPI_FAILURE (Status)) +        { +            ACPI_WARNING ((AE_INFO, "AcpiEnable failed")); +            return_ACPI_STATUS (Status); +        } +    } + +    /* +     * Obtain a permanent mapping for the FACS. This is required for the +     * Global Lock and the Firmware Waking Vector +     */ +    Status = AcpiTbInitializeFacs (); +    if (ACPI_FAILURE (Status)) +    { +        ACPI_WARNING ((AE_INFO, "Could not map the FACS table")); +        return_ACPI_STATUS (Status); +    } + +#endif /* !ACPI_REDUCED_HARDWARE */ + +    /* +     * Install the default OpRegion handlers. These are installed unless +     * other handlers have already been installed via the +     * InstallAddressSpaceHandler interface. +     */ +    if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT)) +    { +        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, +            "[Init] Installing default address space handlers\n")); + +        Status = AcpiEvInstallRegionHandlers (); +        if (ACPI_FAILURE (Status)) +        { +            return_ACPI_STATUS (Status); +        } +    } + +#if (!ACPI_REDUCED_HARDWARE) +    /* +     * Initialize ACPI Event handling (Fixed and General Purpose) +     * +     * Note1: We must have the hardware and events initialized before we can +     * execute any control methods safely. Any control method can require +     * ACPI hardware support, so the hardware must be fully initialized before +     * any method execution! +     * +     * Note2: Fixed events are initialized and enabled here. GPEs are +     * initialized, but cannot be enabled until after the hardware is +     * completely initialized (SCI and GlobalLock activated) and the various +     * initialization control methods are run (_REG, _STA, _INI) on the +     * entire namespace. +     */ +    if (!(Flags & ACPI_NO_EVENT_INIT)) +    { +        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, +            "[Init] Initializing ACPI events\n")); + +        Status = AcpiEvInitializeEvents (); +        if (ACPI_FAILURE (Status)) +        { +            return_ACPI_STATUS (Status); +        } +    } + +    /* +     * Install the SCI handler and Global Lock handler. This completes the +     * hardware initialization. +     */ +    if (!(Flags & ACPI_NO_HANDLER_INIT)) +    { +        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, +            "[Init] Installing SCI/GL handlers\n")); + +        Status = AcpiEvInstallXruptHandlers (); +        if (ACPI_FAILURE (Status)) +        { +            return_ACPI_STATUS (Status); +        } +    } + +#endif /* !ACPI_REDUCED_HARDWARE */ + +    return_ACPI_STATUS (Status); +} + +ACPI_EXPORT_SYMBOL (AcpiEnableSubsystem) + + +/******************************************************************************* + * + * FUNCTION:    AcpiInitializeObjects + * + * PARAMETERS:  Flags               - Init/enable Options + * + * RETURN:      Status + * + * DESCRIPTION: Completes namespace initialization by initializing device + *              objects and executing AML code for Regions, buffers, etc. + * + ******************************************************************************/ + +ACPI_STATUS +AcpiInitializeObjects ( +    UINT32                  Flags) +{ +    ACPI_STATUS             Status = AE_OK; + + +    ACPI_FUNCTION_TRACE (AcpiInitializeObjects); + + +    /* +     * Run all _REG methods +     * +     * Note: Any objects accessed by the _REG methods will be automatically +     * initialized, even if they contain executable AML (see the call to +     * AcpiNsInitializeObjects below). +     */ +    if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT)) +    { +        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, +            "[Init] Executing _REG OpRegion methods\n")); + +        Status = AcpiEvInitializeOpRegions (); +        if (ACPI_FAILURE (Status)) +        { +            return_ACPI_STATUS (Status); +        } +    } + +    /* +     * Execute any module-level code that was detected during the table load +     * phase. Although illegal since ACPI 2.0, there are many machines that +     * contain this type of code. Each block of detected executable AML code +     * outside of any control method is wrapped with a temporary control +     * method object and placed on a global list. The methods on this list +     * are executed below. +     */ +    AcpiNsExecModuleCodeList (); + +    /* +     * Initialize the objects that remain uninitialized. This runs the +     * executable AML that may be part of the declaration of these objects: +     * OperationRegions, BufferFields, Buffers, and Packages. +     */ +    if (!(Flags & ACPI_NO_OBJECT_INIT)) +    { +        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, +            "[Init] Completing Initialization of ACPI Objects\n")); + +        Status = AcpiNsInitializeObjects (); +        if (ACPI_FAILURE (Status)) +        { +            return_ACPI_STATUS (Status); +        } +    } + +    /* +     * Initialize all device objects in the namespace. This runs the device +     * _STA and _INI methods. +     */ +    if (!(Flags & ACPI_NO_DEVICE_INIT)) +    { +        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, +            "[Init] Initializing ACPI Devices\n")); + +        Status = AcpiNsInitializeDevices (); +        if (ACPI_FAILURE (Status)) +        { +            return_ACPI_STATUS (Status); +        } +    } + +    /* +     * Empty the caches (delete the cached objects) on the assumption that +     * the table load filled them up more than they will be at runtime -- +     * thus wasting non-paged memory. +     */ +    Status = AcpiPurgeCachedObjects (); + +    AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK; +    return_ACPI_STATUS (Status); +} + +ACPI_EXPORT_SYMBOL (AcpiInitializeObjects) | 
