Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:04

0001 /******************************************************************************
0002  *
0003  * Module Name: utxfinit - External interfaces for ACPICA initialization
0004  *
0005  *****************************************************************************/
0006 
0007 /******************************************************************************
0008  *
0009  * 1. Copyright Notice
0010  *
0011  * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp.
0012  * All rights reserved.
0013  *
0014  * 2. License
0015  *
0016  * 2.1. This is your license from Intel Corp. under its intellectual property
0017  * rights. You may have additional license terms from the party that provided
0018  * you this software, covering your right to use that party's intellectual
0019  * property rights.
0020  *
0021  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
0022  * copy of the source code appearing in this file ("Covered Code") an
0023  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
0024  * base code distributed originally by Intel ("Original Intel Code") to copy,
0025  * make derivatives, distribute, use and display any portion of the Covered
0026  * Code in any form, with the right to sublicense such rights; and
0027  *
0028  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
0029  * license (with the right to sublicense), under only those claims of Intel
0030  * patents that are infringed by the Original Intel Code, to make, use, sell,
0031  * offer to sell, and import the Covered Code and derivative works thereof
0032  * solely to the minimum extent necessary to exercise the above copyright
0033  * license, and in no event shall the patent license extend to any additions
0034  * to or modifications of the Original Intel Code. No other license or right
0035  * is granted directly or by implication, estoppel or otherwise;
0036  *
0037  * The above copyright and patent license is granted only if the following
0038  * conditions are met:
0039  *
0040  * 3. Conditions
0041  *
0042  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
0043  * Redistribution of source code of any substantial portion of the Covered
0044  * Code or modification with rights to further distribute source must include
0045  * the above Copyright Notice, the above License, this list of Conditions,
0046  * and the following Disclaimer and Export Compliance provision. In addition,
0047  * Licensee must cause all Covered Code to which Licensee contributes to
0048  * contain a file documenting the changes Licensee made to create that Covered
0049  * Code and the date of any change. Licensee must include in that file the
0050  * documentation of any changes made by any predecessor Licensee. Licensee
0051  * must include a prominent statement that the modification is derived,
0052  * directly or indirectly, from Original Intel Code.
0053  *
0054  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
0055  * Redistribution of source code of any substantial portion of the Covered
0056  * Code or modification without rights to further distribute source must
0057  * include the following Disclaimer and Export Compliance provision in the
0058  * documentation and/or other materials provided with distribution. In
0059  * addition, Licensee may not authorize further sublicense of source of any
0060  * portion of the Covered Code, and must include terms to the effect that the
0061  * license from Licensee to its licensee is limited to the intellectual
0062  * property embodied in the software Licensee provides to its licensee, and
0063  * not to intellectual property embodied in modifications its licensee may
0064  * make.
0065  *
0066  * 3.3. Redistribution of Executable. Redistribution in executable form of any
0067  * substantial portion of the Covered Code or modification must reproduce the
0068  * above Copyright Notice, and the following Disclaimer and Export Compliance
0069  * provision in the documentation and/or other materials provided with the
0070  * distribution.
0071  *
0072  * 3.4. Intel retains all right, title, and interest in and to the Original
0073  * Intel Code.
0074  *
0075  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
0076  * Intel shall be used in advertising or otherwise to promote the sale, use or
0077  * other dealings in products derived from or relating to the Covered Code
0078  * without prior written authorization from Intel.
0079  *
0080  * 4. Disclaimer and Export Compliance
0081  *
0082  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
0083  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
0084  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
0085  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
0086  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
0087  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
0088  * PARTICULAR PURPOSE.
0089  *
0090  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
0091  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
0092  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
0093  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
0094  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
0095  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
0096  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
0097  * LIMITED REMEDY.
0098  *
0099  * 4.3. Licensee shall not export, either directly or indirectly, any of this
0100  * software or system incorporating such software without first obtaining any
0101  * required license or other approval from the U. S. Department of Commerce or
0102  * any other agency or department of the United States Government. In the
0103  * event Licensee exports any such software from the United States or
0104  * re-exports any such software from a foreign destination, Licensee shall
0105  * ensure that the distribution and export/re-export of the software is in
0106  * compliance with all laws, regulations, orders, or other restrictions of the
0107  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
0108  * any of its subsidiaries will export/re-export any technical data, process,
0109  * software, or service, directly or indirectly, to any country for which the
0110  * United States government or any agency thereof requires an export license,
0111  * other governmental approval, or letter of assurance, without first obtaining
0112  * such license, approval or letter.
0113  *
0114  *****************************************************************************
0115  *
0116  * Alternatively, you may choose to be licensed under the terms of the
0117  * following license:
0118  *
0119  * Redistribution and use in source and binary forms, with or without
0120  * modification, are permitted provided that the following conditions
0121  * are met:
0122  * 1. Redistributions of source code must retain the above copyright
0123  *    notice, this list of conditions, and the following disclaimer,
0124  *    without modification.
0125  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
0126  *    substantially similar to the "NO WARRANTY" disclaimer below
0127  *    ("Disclaimer") and any redistribution must be conditioned upon
0128  *    including a substantially similar Disclaimer requirement for further
0129  *    binary redistribution.
0130  * 3. Neither the names of the above-listed copyright holders nor the names
0131  *    of any contributors may be used to endorse or promote products derived
0132  *    from this software without specific prior written permission.
0133  *
0134  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
0135  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
0136  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
0137  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
0138  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
0139  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
0140  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0141  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0142  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0143  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
0144  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0145  *
0146  * Alternatively, you may choose to be licensed under the terms of the
0147  * GNU General Public License ("GPL") version 2 as published by the Free
0148  * Software Foundation.
0149  *
0150  *****************************************************************************/
0151 
0152 #define EXPORT_ACPI_INTERFACES
0153 
0154 #include "acpi.h"
0155 #include "accommon.h"
0156 #include "acevents.h"
0157 #include "acnamesp.h"
0158 #include "acdebug.h"
0159 #include "actables.h"
0160 
0161 #define _COMPONENT          ACPI_UTILITIES
0162         ACPI_MODULE_NAME    ("utxfinit")
0163 
0164 /* For AcpiExec only */
0165 void
0166 AeDoObjectOverrides (
0167     void);
0168 
0169 
0170 /*******************************************************************************
0171  *
0172  * FUNCTION:    AcpiInitializeSubsystem
0173  *
0174  * PARAMETERS:  None
0175  *
0176  * RETURN:      Status
0177  *
0178  * DESCRIPTION: Initializes all global variables. This is the first function
0179  *              called, so any early initialization belongs here.
0180  *
0181  ******************************************************************************/
0182 
0183 ACPI_STATUS ACPI_INIT_FUNCTION
0184 AcpiInitializeSubsystem (
0185     void)
0186 {
0187     ACPI_STATUS             Status;
0188 
0189 
0190     ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem);
0191 
0192 
0193     AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE;
0194     ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ());
0195 
0196     /* Initialize the OS-Dependent layer */
0197 
0198     Status = AcpiOsInitialize ();
0199     if (ACPI_FAILURE (Status))
0200     {
0201         ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization"));
0202         return_ACPI_STATUS (Status);
0203     }
0204 
0205     /* Initialize all globals used by the subsystem */
0206 
0207     Status = AcpiUtInitGlobals ();
0208     if (ACPI_FAILURE (Status))
0209     {
0210         ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals"));
0211         return_ACPI_STATUS (Status);
0212     }
0213 
0214     /* Create the default mutex objects */
0215 
0216     Status = AcpiUtMutexInitialize ();
0217     if (ACPI_FAILURE (Status))
0218     {
0219         ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation"));
0220         return_ACPI_STATUS (Status);
0221     }
0222 
0223     /*
0224      * Initialize the namespace manager and
0225      * the root of the namespace tree
0226      */
0227     Status = AcpiNsRootInitialize ();
0228     if (ACPI_FAILURE (Status))
0229     {
0230         ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization"));
0231         return_ACPI_STATUS (Status);
0232     }
0233 
0234     /* Initialize the global OSI interfaces list with the static names */
0235 
0236     Status = AcpiUtInitializeInterfaces ();
0237     if (ACPI_FAILURE (Status))
0238     {
0239         ACPI_EXCEPTION ((AE_INFO, Status, "During OSI interfaces initialization"));
0240         return_ACPI_STATUS (Status);
0241     }
0242 
0243     return_ACPI_STATUS (AE_OK);
0244 }
0245 
0246 ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeSubsystem)
0247 
0248 
0249 /*******************************************************************************
0250  *
0251  * FUNCTION:    AcpiEnableSubsystem
0252  *
0253  * PARAMETERS:  Flags               - Init/enable Options
0254  *
0255  * RETURN:      Status
0256  *
0257  * DESCRIPTION: Completes the subsystem initialization including hardware.
0258  *              Puts system into ACPI mode if it isn't already.
0259  *
0260  ******************************************************************************/
0261 
0262 ACPI_STATUS ACPI_INIT_FUNCTION
0263 AcpiEnableSubsystem (
0264     UINT32                  Flags)
0265 {
0266     ACPI_STATUS             Status = AE_OK;
0267 
0268 
0269     ACPI_FUNCTION_TRACE (AcpiEnableSubsystem);
0270 
0271 
0272     /*
0273      * The early initialization phase is complete. The namespace is loaded,
0274      * and we can now support address spaces other than Memory, I/O, and
0275      * PCI_Config.
0276      */
0277     AcpiGbl_EarlyInitialization = FALSE;
0278 
0279 #if (!ACPI_REDUCED_HARDWARE)
0280 
0281     /* Enable ACPI mode */
0282 
0283     if (!(Flags & ACPI_NO_ACPI_ENABLE))
0284     {
0285         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n"));
0286 
0287         AcpiGbl_OriginalMode = AcpiHwGetMode();
0288 
0289         Status = AcpiEnable ();
0290         if (ACPI_FAILURE (Status))
0291         {
0292             ACPI_WARNING ((AE_INFO, "AcpiEnable failed"));
0293             return_ACPI_STATUS (Status);
0294         }
0295     }
0296 
0297     /*
0298      * Obtain a permanent mapping for the FACS. This is required for the
0299      * Global Lock and the Firmware Waking Vector
0300      */
0301     if (!(Flags & ACPI_NO_FACS_INIT))
0302     {
0303         Status = AcpiTbInitializeFacs ();
0304         if (ACPI_FAILURE (Status))
0305         {
0306             ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
0307             return_ACPI_STATUS (Status);
0308         }
0309     }
0310 
0311     /*
0312      * Initialize ACPI Event handling (Fixed and General Purpose)
0313      *
0314      * Note1: We must have the hardware and events initialized before we can
0315      * execute any control methods safely. Any control method can require
0316      * ACPI hardware support, so the hardware must be fully initialized before
0317      * any method execution!
0318      *
0319      * Note2: Fixed events are initialized and enabled here. GPEs are
0320      * initialized, but cannot be enabled until after the hardware is
0321      * completely initialized (SCI and GlobalLock activated) and the various
0322      * initialization control methods are run (_REG, _STA, _INI) on the
0323      * entire namespace.
0324      */
0325     if (!(Flags & ACPI_NO_EVENT_INIT))
0326     {
0327         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
0328             "[Init] Initializing ACPI events\n"));
0329 
0330         Status = AcpiEvInitializeEvents ();
0331         if (ACPI_FAILURE (Status))
0332         {
0333             return_ACPI_STATUS (Status);
0334         }
0335     }
0336 
0337     /*
0338      * Install the SCI handler and Global Lock handler. This completes the
0339      * hardware initialization.
0340      */
0341     if (!(Flags & ACPI_NO_HANDLER_INIT))
0342     {
0343         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
0344             "[Init] Installing SCI/GL handlers\n"));
0345 
0346         Status = AcpiEvInstallXruptHandlers ();
0347         if (ACPI_FAILURE (Status))
0348         {
0349             return_ACPI_STATUS (Status);
0350         }
0351     }
0352 
0353 #endif /* !ACPI_REDUCED_HARDWARE */
0354 
0355     return_ACPI_STATUS (Status);
0356 }
0357 
0358 ACPI_EXPORT_SYMBOL_INIT (AcpiEnableSubsystem)
0359 
0360 
0361 /*******************************************************************************
0362  *
0363  * FUNCTION:    AcpiInitializeObjects
0364  *
0365  * PARAMETERS:  Flags               - Init/enable Options
0366  *
0367  * RETURN:      Status
0368  *
0369  * DESCRIPTION: Completes namespace initialization by initializing device
0370  *              objects and executing AML code for Regions, buffers, etc.
0371  *
0372  ******************************************************************************/
0373 
0374 ACPI_STATUS ACPI_INIT_FUNCTION
0375 AcpiInitializeObjects (
0376     UINT32                  Flags)
0377 {
0378     ACPI_STATUS             Status = AE_OK;
0379 
0380 
0381     ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
0382 
0383 
0384 #ifdef ACPI_OBSOLETE_BEHAVIOR
0385     /*
0386      * 05/2019: Removed, initialization now happens at both object
0387      * creation and table load time
0388      */
0389 
0390     /*
0391      * Initialize the objects that remain uninitialized. This
0392      * runs the executable AML that may be part of the
0393      * declaration of these objects: OperationRegions, BufferFields,
0394      * BankFields, Buffers, and Packages.
0395      */
0396     if (!(Flags & ACPI_NO_OBJECT_INIT))
0397     {
0398         Status = AcpiNsInitializeObjects ();
0399         if (ACPI_FAILURE (Status))
0400         {
0401             return_ACPI_STATUS (Status);
0402         }
0403     }
0404 #endif
0405 
0406     /*
0407      * Initialize all device/region objects in the namespace. This runs
0408      * the device _STA and _INI methods and region _REG methods.
0409      */
0410     if (!(Flags & (ACPI_NO_DEVICE_INIT | ACPI_NO_ADDRESS_SPACE_INIT)))
0411     {
0412         Status = AcpiNsInitializeDevices (Flags);
0413         if (ACPI_FAILURE (Status))
0414         {
0415             return_ACPI_STATUS (Status);
0416         }
0417     }
0418 
0419     /*
0420      * Empty the caches (delete the cached objects) on the assumption that
0421      * the table load filled them up more than they will be at runtime --
0422      * thus wasting non-paged memory.
0423      */
0424     Status = AcpiPurgeCachedObjects ();
0425 
0426     AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK;
0427     return_ACPI_STATUS (Status);
0428 }
0429 
0430 ACPI_EXPORT_SYMBOL_INIT (AcpiInitializeObjects)