Back to home page

Quest Cross Reference

 
 

    


Warning, cross-references for /kernel/drivers/acpica/utxface.c need to be fixed.

0001 /******************************************************************************
0002  *
0003  * Module Name: utxface - External interfaces for "global" ACPI functions
0004  *
0005  *****************************************************************************/
0006 
0007 /******************************************************************************
0008  *
0009  * 1. Copyright Notice
0010  *
0011  * Some or all of this work - Copyright (c) 1999 - 2009, 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 
0117 #define __UTXFACE_C__
0118 
0119 #include "acpi.h"
0120 #include "accommon.h"
0121 #include "acevents.h"
0122 #include "acnamesp.h"
0123 #include "acdebug.h"
0124 #include "actables.h"
0125 
0126 #define _COMPONENT          ACPI_UTILITIES
0127         ACPI_MODULE_NAME    ("utxface")
0128 
0129 
0130 #ifndef ACPI_ASL_COMPILER
0131 
0132 /*******************************************************************************
0133  *
0134  * FUNCTION:    AcpiInitializeSubsystem
0135  *
0136  * PARAMETERS:  None
0137  *
0138  * RETURN:      Status
0139  *
0140  * DESCRIPTION: Initializes all global variables.  This is the first function
0141  *              called, so any early initialization belongs here.
0142  *
0143  ******************************************************************************/
0144 
0145 ACPI_STATUS
0146 AcpiInitializeSubsystem (
0147     void)
0148 {
0149     ACPI_STATUS             Status;
0150 
0151 
0152     ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem);
0153 
0154 
0155     AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE;
0156     ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ());
0157 
0158     /* Initialize the OS-Dependent layer */
0159 
0160     Status = AcpiOsInitialize ();
0161     if (ACPI_FAILURE (Status))
0162     {
0163         ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization"));
0164         return_ACPI_STATUS (Status);
0165     }
0166 
0167     /* Initialize all globals used by the subsystem */
0168 
0169     Status = AcpiUtInitGlobals ();
0170     if (ACPI_FAILURE (Status))
0171     {
0172         ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals"));
0173         return_ACPI_STATUS (Status);
0174     }
0175 
0176     /* Create the default mutex objects */
0177 
0178     Status = AcpiUtMutexInitialize ();
0179     if (ACPI_FAILURE (Status))
0180     {
0181         ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation"));
0182         return_ACPI_STATUS (Status);
0183     }
0184 
0185     /*
0186      * Initialize the namespace manager and
0187      * the root of the namespace tree
0188      */
0189     Status = AcpiNsRootInitialize ();
0190     if (ACPI_FAILURE (Status))
0191     {
0192         ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization"));
0193         return_ACPI_STATUS (Status);
0194     }
0195 
0196     /* If configured, initialize the AML debugger */
0197 
0198     ACPI_DEBUGGER_EXEC (Status = AcpiDbInitialize ());
0199     return_ACPI_STATUS (Status);
0200 }
0201 
0202 ACPI_EXPORT_SYMBOL (AcpiInitializeSubsystem)
0203 
0204 
0205 /*******************************************************************************
0206  *
0207  * FUNCTION:    AcpiEnableSubsystem
0208  *
0209  * PARAMETERS:  Flags           - Init/enable Options
0210  *
0211  * RETURN:      Status
0212  *
0213  * DESCRIPTION: Completes the subsystem initialization including hardware.
0214  *              Puts system into ACPI mode if it isn't already.
0215  *
0216  ******************************************************************************/
0217 
0218 ACPI_STATUS
0219 AcpiEnableSubsystem (
0220     UINT32                  Flags)
0221 {
0222     ACPI_STATUS             Status = AE_OK;
0223 
0224 
0225     ACPI_FUNCTION_TRACE (AcpiEnableSubsystem);
0226 
0227 
0228     /* Enable ACPI mode */
0229 
0230     if (!(Flags & ACPI_NO_ACPI_ENABLE))
0231     {
0232         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n"));
0233 
0234         AcpiGbl_OriginalMode = AcpiHwGetMode();
0235 
0236         Status = AcpiEnable ();
0237         if (ACPI_FAILURE (Status))
0238         {
0239             ACPI_WARNING ((AE_INFO, "AcpiEnable failed"));
0240             return_ACPI_STATUS (Status);
0241         }
0242     }
0243 
0244     /*
0245      * Obtain a permanent mapping for the FACS. This is required for the
0246      * Global Lock and the Firmware Waking Vector
0247      */
0248     Status = AcpiTbInitializeFacs ();
0249     if (ACPI_FAILURE (Status))
0250     {
0251         ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
0252         return_ACPI_STATUS (Status);
0253     }
0254 
0255     /*
0256      * Install the default OpRegion handlers.  These are installed unless
0257      * other handlers have already been installed via the
0258      * InstallAddressSpaceHandler interface.
0259      */
0260     if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT))
0261     {
0262         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
0263             "[Init] Installing default address space handlers\n"));
0264 
0265         Status = AcpiEvInstallRegionHandlers ();
0266         if (ACPI_FAILURE (Status))
0267         {
0268             return_ACPI_STATUS (Status);
0269         }
0270     }
0271 
0272     /*
0273      * Initialize ACPI Event handling (Fixed and General Purpose)
0274      *
0275      * Note1: We must have the hardware and events initialized before we can
0276      * execute any control methods safely. Any control method can require
0277      * ACPI hardware support, so the hardware must be fully initialized before
0278      * any method execution!
0279      *
0280      * Note2: Fixed events are initialized and enabled here. GPEs are
0281      * initialized, but cannot be enabled until after the hardware is
0282      * completely initialized (SCI and GlobalLock activated) and the various
0283      * initialization control methods are run (_REG, _STA, _INI) on the
0284      * entire namespace.
0285      */
0286     if (!(Flags & ACPI_NO_EVENT_INIT))
0287     {
0288         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
0289             "[Init] Initializing ACPI events\n"));
0290 
0291         Status = AcpiEvInitializeEvents ();
0292         if (ACPI_FAILURE (Status))
0293         {
0294             return_ACPI_STATUS (Status);
0295         }
0296     }
0297 
0298     /*
0299      * Install the SCI handler and Global Lock handler. This completes the
0300      * hardware initialization.
0301      */
0302     if (!(Flags & ACPI_NO_HANDLER_INIT))
0303     {
0304         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
0305             "[Init] Installing SCI/GL handlers\n"));
0306 
0307         Status = AcpiEvInstallXruptHandlers ();
0308         if (ACPI_FAILURE (Status))
0309         {
0310             return_ACPI_STATUS (Status);
0311         }
0312     }
0313 
0314     return_ACPI_STATUS (Status);
0315 }
0316 
0317 ACPI_EXPORT_SYMBOL (AcpiEnableSubsystem)
0318 
0319 
0320 /*******************************************************************************
0321  *
0322  * FUNCTION:    AcpiInitializeObjects
0323  *
0324  * PARAMETERS:  Flags           - Init/enable Options
0325  *
0326  * RETURN:      Status
0327  *
0328  * DESCRIPTION: Completes namespace initialization by initializing device
0329  *              objects and executing AML code for Regions, buffers, etc.
0330  *
0331  ******************************************************************************/
0332 
0333 ACPI_STATUS
0334 AcpiInitializeObjects (
0335     UINT32                  Flags)
0336 {
0337     ACPI_STATUS             Status = AE_OK;
0338 
0339 
0340     ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
0341 
0342 
0343     /*
0344      * Run all _REG methods
0345      *
0346      * Note: Any objects accessed by the _REG methods will be automatically
0347      * initialized, even if they contain executable AML (see the call to
0348      * AcpiNsInitializeObjects below).
0349      */
0350     if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT))
0351     {
0352         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
0353             "[Init] Executing _REG OpRegion methods\n"));
0354 
0355         Status = AcpiEvInitializeOpRegions ();
0356         if (ACPI_FAILURE (Status))
0357         {
0358             return_ACPI_STATUS (Status);
0359         }
0360     }
0361 
0362     /*
0363      * Initialize the objects that remain uninitialized. This runs the
0364      * executable AML that may be part of the declaration of these objects:
0365      * OperationRegions, BufferFields, Buffers, and Packages.
0366      */
0367     if (!(Flags & ACPI_NO_OBJECT_INIT))
0368     {
0369         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
0370             "[Init] Completing Initialization of ACPI Objects\n"));
0371 
0372         Status = AcpiNsInitializeObjects ();
0373         if (ACPI_FAILURE (Status))
0374         {
0375             return_ACPI_STATUS (Status);
0376         }
0377     }
0378 
0379     /*
0380      * Initialize all device objects in the namespace. This runs the device
0381      * _STA and _INI methods.
0382      */
0383     if (!(Flags & ACPI_NO_DEVICE_INIT))
0384     {
0385         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
0386             "[Init] Initializing ACPI Devices\n"));
0387 
0388         Status = AcpiNsInitializeDevices ();
0389         if (ACPI_FAILURE (Status))
0390         {
0391             return_ACPI_STATUS (Status);
0392         }
0393     }
0394 
0395     /*
0396      * Initialize the GPE blocks defined in the FADT (GPE block 0 and 1).
0397      * The runtime GPEs are enabled here.
0398      *
0399      * This is where the _PRW methods are executed for the GPEs. These
0400      * methods can only be executed after the SCI and Global Lock handlers are
0401      * installed and initialized.
0402      *
0403      * GPEs can only be enabled after the _REG, _STA, and _INI methods have
0404      * been run. This ensures that all Operation Regions and all Devices have
0405      * been initialized and are ready.
0406      */
0407     if (!(Flags & ACPI_NO_EVENT_INIT))
0408     {
0409         Status = AcpiEvInstallFadtGpes ();
0410         if (ACPI_FAILURE (Status))
0411         {
0412             return (Status);
0413         }
0414     }
0415 
0416     /*
0417      * Empty the caches (delete the cached objects) on the assumption that
0418      * the table load filled them up more than they will be at runtime --
0419      * thus wasting non-paged memory.
0420      */
0421     Status = AcpiPurgeCachedObjects ();
0422 
0423     AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK;
0424     return_ACPI_STATUS (Status);
0425 }
0426 
0427 ACPI_EXPORT_SYMBOL (AcpiInitializeObjects)
0428 
0429 
0430 #endif
0431 
0432 /*******************************************************************************
0433  *
0434  * FUNCTION:    AcpiTerminate
0435  *
0436  * PARAMETERS:  None
0437  *
0438  * RETURN:      Status
0439  *
0440  * DESCRIPTION: Shutdown the ACPI subsystem.  Release all resources.
0441  *
0442  ******************************************************************************/
0443 
0444 ACPI_STATUS
0445 AcpiTerminate (
0446     void)
0447 {
0448     ACPI_STATUS         Status;
0449 
0450 
0451     ACPI_FUNCTION_TRACE (AcpiTerminate);
0452 
0453 
0454     /* Terminate the AML Debugger if present */
0455 
0456     ACPI_DEBUGGER_EXEC(AcpiGbl_DbTerminateThreads = TRUE);
0457 
0458     /* Shutdown and free all resources */
0459 
0460     AcpiUtSubsystemShutdown ();
0461 
0462 
0463     /* Free the mutex objects */
0464 
0465     AcpiUtMutexTerminate ();
0466 
0467 
0468 #ifdef ACPI_DEBUGGER
0469 
0470     /* Shut down the debugger */
0471 
0472     AcpiDbTerminate ();
0473 #endif
0474 
0475     /* Now we can shutdown the OS-dependent layer */
0476 
0477     Status = AcpiOsTerminate ();
0478     return_ACPI_STATUS (Status);
0479 }
0480 
0481 ACPI_EXPORT_SYMBOL (AcpiTerminate)
0482 
0483 #ifndef ACPI_ASL_COMPILER
0484 
0485 /*******************************************************************************
0486  *
0487  * FUNCTION:    AcpiSubsystemStatus
0488  *
0489  * PARAMETERS:  None
0490  *
0491  * RETURN:      Status of the ACPI subsystem
0492  *
0493  * DESCRIPTION: Other drivers that use the ACPI subsystem should call this
0494  *              before making any other calls, to ensure the subsystem
0495  *              initialized successfully.
0496  *
0497  ******************************************************************************/
0498 
0499 ACPI_STATUS
0500 AcpiSubsystemStatus (
0501     void)
0502 {
0503 
0504     if (AcpiGbl_StartupFlags & ACPI_INITIALIZED_OK)
0505     {
0506         return (AE_OK);
0507     }
0508     else
0509     {
0510         return (AE_ERROR);
0511     }
0512 }
0513 
0514 ACPI_EXPORT_SYMBOL (AcpiSubsystemStatus)
0515 
0516 
0517 /*******************************************************************************
0518  *
0519  * FUNCTION:    AcpiGetSystemInfo
0520  *
0521  * PARAMETERS:  OutBuffer       - A buffer to receive the resources for the
0522  *                                device
0523  *
0524  * RETURN:      Status          - the status of the call
0525  *
0526  * DESCRIPTION: This function is called to get information about the current
0527  *              state of the ACPI subsystem.  It will return system information
0528  *              in the OutBuffer.
0529  *
0530  *              If the function fails an appropriate status will be returned
0531  *              and the value of OutBuffer is undefined.
0532  *
0533  ******************************************************************************/
0534 
0535 ACPI_STATUS
0536 AcpiGetSystemInfo (
0537     ACPI_BUFFER             *OutBuffer)
0538 {
0539     ACPI_SYSTEM_INFO        *InfoPtr;
0540     ACPI_STATUS             Status;
0541 
0542 
0543     ACPI_FUNCTION_TRACE (AcpiGetSystemInfo);
0544 
0545 
0546     /* Parameter validation */
0547 
0548     Status = AcpiUtValidateBuffer (OutBuffer);
0549     if (ACPI_FAILURE (Status))
0550     {
0551         return_ACPI_STATUS (Status);
0552     }
0553 
0554     /* Validate/Allocate/Clear caller buffer */
0555 
0556     Status = AcpiUtInitializeBuffer (OutBuffer, sizeof (ACPI_SYSTEM_INFO));
0557     if (ACPI_FAILURE (Status))
0558     {
0559         return_ACPI_STATUS (Status);
0560     }
0561 
0562     /*
0563      * Populate the return buffer
0564      */
0565     InfoPtr = (ACPI_SYSTEM_INFO *) OutBuffer->Pointer;
0566 
0567     InfoPtr->AcpiCaVersion = ACPI_CA_VERSION;
0568 
0569     /* System flags (ACPI capabilities) */
0570 
0571     InfoPtr->Flags = ACPI_SYS_MODE_ACPI;
0572 
0573     /* Timer resolution - 24 or 32 bits  */
0574 
0575     if (AcpiGbl_FADT.Flags & ACPI_FADT_32BIT_TIMER)
0576     {
0577         InfoPtr->TimerResolution = 24;
0578     }
0579     else
0580     {
0581         InfoPtr->TimerResolution = 32;
0582     }
0583 
0584     /* Clear the reserved fields */
0585 
0586     InfoPtr->Reserved1 = 0;
0587     InfoPtr->Reserved2 = 0;
0588 
0589     /* Current debug levels */
0590 
0591     InfoPtr->DebugLayer = AcpiDbgLayer;
0592     InfoPtr->DebugLevel = AcpiDbgLevel;
0593 
0594     return_ACPI_STATUS (AE_OK);
0595 }
0596 
0597 ACPI_EXPORT_SYMBOL (AcpiGetSystemInfo)
0598 
0599 
0600 /*******************************************************************************
0601  *
0602  * FUNCTION:    AcpiGetStatistics
0603  *
0604  * PARAMETERS:  Stats           - Where the statistics are returned
0605  *
0606  * RETURN:      Status          - the status of the call
0607  *
0608  * DESCRIPTION: Get the contents of the various system counters
0609  *
0610  ******************************************************************************/
0611 
0612 ACPI_STATUS
0613 AcpiGetStatistics (
0614     ACPI_STATISTICS         *Stats)
0615 {
0616     ACPI_FUNCTION_TRACE (AcpiGetStatistics);
0617 
0618 
0619     /* Parameter validation */
0620 
0621     if (!Stats)
0622     {
0623         return_ACPI_STATUS (AE_BAD_PARAMETER);
0624     }
0625 
0626     /* Various interrupt-based event counters */
0627 
0628     Stats->SciCount = AcpiSciCount;
0629     Stats->GpeCount = AcpiGpeCount;
0630 
0631     ACPI_MEMCPY (Stats->FixedEventCount, AcpiFixedEventCount,
0632         sizeof (AcpiFixedEventCount));
0633 
0634 
0635     /* Other counters */
0636 
0637     Stats->MethodCount = AcpiMethodCount;
0638 
0639     return_ACPI_STATUS (AE_OK);
0640 }
0641 
0642 ACPI_EXPORT_SYMBOL (AcpiGetStatistics)
0643 
0644 
0645 /*****************************************************************************
0646  *
0647  * FUNCTION:    AcpiInstallInitializationHandler
0648  *
0649  * PARAMETERS:  Handler             - Callback procedure
0650  *              Function            - Not (currently) used, see below
0651  *
0652  * RETURN:      Status
0653  *
0654  * DESCRIPTION: Install an initialization handler
0655  *
0656  * TBD: When a second function is added, must save the Function also.
0657  *
0658  ****************************************************************************/
0659 
0660 ACPI_STATUS
0661 AcpiInstallInitializationHandler (
0662     ACPI_INIT_HANDLER       Handler,
0663     UINT32                  Function)
0664 {
0665 
0666     if (!Handler)
0667     {
0668         return (AE_BAD_PARAMETER);
0669     }
0670 
0671     if (AcpiGbl_InitHandler)
0672     {
0673         return (AE_ALREADY_EXISTS);
0674     }
0675 
0676     AcpiGbl_InitHandler = Handler;
0677     return AE_OK;
0678 }
0679 
0680 ACPI_EXPORT_SYMBOL (AcpiInstallInitializationHandler)
0681 
0682 
0683 /*****************************************************************************
0684  *
0685  * FUNCTION:    AcpiPurgeCachedObjects
0686  *
0687  * PARAMETERS:  None
0688  *
0689  * RETURN:      Status
0690  *
0691  * DESCRIPTION: Empty all caches (delete the cached objects)
0692  *
0693  ****************************************************************************/
0694 
0695 ACPI_STATUS
0696 AcpiPurgeCachedObjects (
0697     void)
0698 {
0699     ACPI_FUNCTION_TRACE (AcpiPurgeCachedObjects);
0700 
0701     (void) AcpiOsPurgeCache (AcpiGbl_StateCache);
0702     (void) AcpiOsPurgeCache (AcpiGbl_OperandCache);
0703     (void) AcpiOsPurgeCache (AcpiGbl_PsNodeCache);
0704     (void) AcpiOsPurgeCache (AcpiGbl_PsNodeExtCache);
0705     return_ACPI_STATUS (AE_OK);
0706 }
0707 
0708 ACPI_EXPORT_SYMBOL (AcpiPurgeCachedObjects)
0709 
0710 #endif /* ACPI_ASL_COMPILER */
0711