Home | History | Annotate | Line # | Download | only in utilities
utinit.c revision 1.1.1.2.20.2
      1           1.1    jruoho /******************************************************************************
      2           1.1    jruoho  *
      3           1.1    jruoho  * Module Name: utinit - Common ACPI subsystem initialization
      4           1.1    jruoho  *
      5           1.1    jruoho  *****************************************************************************/
      6           1.1    jruoho 
      7       1.1.1.2    jruoho /*
      8  1.1.1.2.20.2  jdolecek  * Copyright (C) 2000 - 2017, Intel Corp.
      9           1.1    jruoho  * All rights reserved.
     10           1.1    jruoho  *
     11       1.1.1.2    jruoho  * Redistribution and use in source and binary forms, with or without
     12       1.1.1.2    jruoho  * modification, are permitted provided that the following conditions
     13       1.1.1.2    jruoho  * are met:
     14       1.1.1.2    jruoho  * 1. Redistributions of source code must retain the above copyright
     15       1.1.1.2    jruoho  *    notice, this list of conditions, and the following disclaimer,
     16       1.1.1.2    jruoho  *    without modification.
     17       1.1.1.2    jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18       1.1.1.2    jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19       1.1.1.2    jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20       1.1.1.2    jruoho  *    including a substantially similar Disclaimer requirement for further
     21       1.1.1.2    jruoho  *    binary redistribution.
     22       1.1.1.2    jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23       1.1.1.2    jruoho  *    of any contributors may be used to endorse or promote products derived
     24       1.1.1.2    jruoho  *    from this software without specific prior written permission.
     25       1.1.1.2    jruoho  *
     26       1.1.1.2    jruoho  * Alternatively, this software may be distributed under the terms of the
     27       1.1.1.2    jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28       1.1.1.2    jruoho  * Software Foundation.
     29       1.1.1.2    jruoho  *
     30       1.1.1.2    jruoho  * NO WARRANTY
     31       1.1.1.2    jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32       1.1.1.2    jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33       1.1.1.2    jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34       1.1.1.2    jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35       1.1.1.2    jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36       1.1.1.2    jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37       1.1.1.2    jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38       1.1.1.2    jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39       1.1.1.2    jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40       1.1.1.2    jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41       1.1.1.2    jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42       1.1.1.2    jruoho  */
     43           1.1    jruoho 
     44           1.1    jruoho #include "acpi.h"
     45           1.1    jruoho #include "accommon.h"
     46           1.1    jruoho #include "acnamesp.h"
     47           1.1    jruoho #include "acevents.h"
     48           1.1    jruoho #include "actables.h"
     49           1.1    jruoho 
     50           1.1    jruoho #define _COMPONENT          ACPI_UTILITIES
     51           1.1    jruoho         ACPI_MODULE_NAME    ("utinit")
     52           1.1    jruoho 
     53           1.1    jruoho /* Local prototypes */
     54           1.1    jruoho 
     55           1.1    jruoho static void AcpiUtTerminate (
     56           1.1    jruoho     void);
     57           1.1    jruoho 
     58  1.1.1.2.20.1       tls #if (!ACPI_REDUCED_HARDWARE)
     59           1.1    jruoho 
     60  1.1.1.2.20.1       tls static void
     61  1.1.1.2.20.1       tls AcpiUtFreeGpeLists (
     62  1.1.1.2.20.1       tls     void);
     63  1.1.1.2.20.1       tls 
     64  1.1.1.2.20.1       tls #else
     65  1.1.1.2.20.1       tls 
     66  1.1.1.2.20.1       tls #define AcpiUtFreeGpeLists()
     67  1.1.1.2.20.1       tls #endif /* !ACPI_REDUCED_HARDWARE */
     68  1.1.1.2.20.1       tls 
     69  1.1.1.2.20.1       tls 
     70  1.1.1.2.20.1       tls #if (!ACPI_REDUCED_HARDWARE)
     71           1.1    jruoho /******************************************************************************
     72           1.1    jruoho  *
     73  1.1.1.2.20.1       tls  * FUNCTION:    AcpiUtFreeGpeLists
     74           1.1    jruoho  *
     75           1.1    jruoho  * PARAMETERS:  none
     76           1.1    jruoho  *
     77           1.1    jruoho  * RETURN:      none
     78           1.1    jruoho  *
     79  1.1.1.2.20.1       tls  * DESCRIPTION: Free global GPE lists
     80           1.1    jruoho  *
     81           1.1    jruoho  ******************************************************************************/
     82           1.1    jruoho 
     83           1.1    jruoho static void
     84  1.1.1.2.20.1       tls AcpiUtFreeGpeLists (
     85           1.1    jruoho     void)
     86           1.1    jruoho {
     87           1.1    jruoho     ACPI_GPE_BLOCK_INFO     *GpeBlock;
     88           1.1    jruoho     ACPI_GPE_BLOCK_INFO     *NextGpeBlock;
     89           1.1    jruoho     ACPI_GPE_XRUPT_INFO     *GpeXruptInfo;
     90           1.1    jruoho     ACPI_GPE_XRUPT_INFO     *NextGpeXruptInfo;
     91           1.1    jruoho 
     92           1.1    jruoho 
     93           1.1    jruoho     /* Free global GPE blocks and related info structures */
     94           1.1    jruoho 
     95           1.1    jruoho     GpeXruptInfo = AcpiGbl_GpeXruptListHead;
     96           1.1    jruoho     while (GpeXruptInfo)
     97           1.1    jruoho     {
     98           1.1    jruoho         GpeBlock = GpeXruptInfo->GpeBlockListHead;
     99           1.1    jruoho         while (GpeBlock)
    100           1.1    jruoho         {
    101           1.1    jruoho             NextGpeBlock = GpeBlock->Next;
    102           1.1    jruoho             ACPI_FREE (GpeBlock->EventInfo);
    103           1.1    jruoho             ACPI_FREE (GpeBlock->RegisterInfo);
    104           1.1    jruoho             ACPI_FREE (GpeBlock);
    105           1.1    jruoho 
    106           1.1    jruoho             GpeBlock = NextGpeBlock;
    107           1.1    jruoho         }
    108           1.1    jruoho         NextGpeXruptInfo = GpeXruptInfo->Next;
    109           1.1    jruoho         ACPI_FREE (GpeXruptInfo);
    110           1.1    jruoho         GpeXruptInfo = NextGpeXruptInfo;
    111           1.1    jruoho     }
    112  1.1.1.2.20.1       tls }
    113  1.1.1.2.20.1       tls #endif /* !ACPI_REDUCED_HARDWARE */
    114  1.1.1.2.20.1       tls 
    115  1.1.1.2.20.1       tls 
    116  1.1.1.2.20.2  jdolecek /*******************************************************************************
    117  1.1.1.2.20.2  jdolecek  *
    118  1.1.1.2.20.2  jdolecek  * FUNCTION:    AcpiUtInitGlobals
    119  1.1.1.2.20.2  jdolecek  *
    120  1.1.1.2.20.2  jdolecek  * PARAMETERS:  None
    121  1.1.1.2.20.2  jdolecek  *
    122  1.1.1.2.20.2  jdolecek  * RETURN:      Status
    123  1.1.1.2.20.2  jdolecek  *
    124  1.1.1.2.20.2  jdolecek  * DESCRIPTION: Initialize ACPICA globals. All globals that require specific
    125  1.1.1.2.20.2  jdolecek  *              initialization should be initialized here. This allows for
    126  1.1.1.2.20.2  jdolecek  *              a warm restart.
    127  1.1.1.2.20.2  jdolecek  *
    128  1.1.1.2.20.2  jdolecek  ******************************************************************************/
    129  1.1.1.2.20.2  jdolecek 
    130  1.1.1.2.20.2  jdolecek ACPI_STATUS
    131  1.1.1.2.20.2  jdolecek AcpiUtInitGlobals (
    132  1.1.1.2.20.2  jdolecek     void)
    133  1.1.1.2.20.2  jdolecek {
    134  1.1.1.2.20.2  jdolecek     ACPI_STATUS             Status;
    135  1.1.1.2.20.2  jdolecek     UINT32                  i;
    136  1.1.1.2.20.2  jdolecek 
    137  1.1.1.2.20.2  jdolecek 
    138  1.1.1.2.20.2  jdolecek     ACPI_FUNCTION_TRACE (UtInitGlobals);
    139  1.1.1.2.20.2  jdolecek 
    140  1.1.1.2.20.2  jdolecek 
    141  1.1.1.2.20.2  jdolecek     /* Create all memory caches */
    142  1.1.1.2.20.2  jdolecek 
    143  1.1.1.2.20.2  jdolecek     Status = AcpiUtCreateCaches ();
    144  1.1.1.2.20.2  jdolecek     if (ACPI_FAILURE (Status))
    145  1.1.1.2.20.2  jdolecek     {
    146  1.1.1.2.20.2  jdolecek         return_ACPI_STATUS (Status);
    147  1.1.1.2.20.2  jdolecek     }
    148  1.1.1.2.20.2  jdolecek 
    149  1.1.1.2.20.2  jdolecek     /* Address Range lists */
    150  1.1.1.2.20.2  jdolecek 
    151  1.1.1.2.20.2  jdolecek     for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++)
    152  1.1.1.2.20.2  jdolecek     {
    153  1.1.1.2.20.2  jdolecek         AcpiGbl_AddressRangeList[i] = NULL;
    154  1.1.1.2.20.2  jdolecek     }
    155  1.1.1.2.20.2  jdolecek 
    156  1.1.1.2.20.2  jdolecek     /* Mutex locked flags */
    157  1.1.1.2.20.2  jdolecek 
    158  1.1.1.2.20.2  jdolecek     for (i = 0; i < ACPI_NUM_MUTEX; i++)
    159  1.1.1.2.20.2  jdolecek     {
    160  1.1.1.2.20.2  jdolecek         AcpiGbl_MutexInfo[i].Mutex          = NULL;
    161  1.1.1.2.20.2  jdolecek         AcpiGbl_MutexInfo[i].ThreadId       = ACPI_MUTEX_NOT_ACQUIRED;
    162  1.1.1.2.20.2  jdolecek         AcpiGbl_MutexInfo[i].UseCount       = 0;
    163  1.1.1.2.20.2  jdolecek     }
    164  1.1.1.2.20.2  jdolecek 
    165  1.1.1.2.20.2  jdolecek     for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
    166  1.1.1.2.20.2  jdolecek     {
    167  1.1.1.2.20.2  jdolecek         AcpiGbl_OwnerIdMask[i]              = 0;
    168  1.1.1.2.20.2  jdolecek     }
    169  1.1.1.2.20.2  jdolecek 
    170  1.1.1.2.20.2  jdolecek     /* Last OwnerID is never valid */
    171  1.1.1.2.20.2  jdolecek 
    172  1.1.1.2.20.2  jdolecek     AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
    173  1.1.1.2.20.2  jdolecek 
    174  1.1.1.2.20.2  jdolecek     /* Event counters */
    175  1.1.1.2.20.2  jdolecek 
    176  1.1.1.2.20.2  jdolecek     AcpiMethodCount                     = 0;
    177  1.1.1.2.20.2  jdolecek     AcpiSciCount                        = 0;
    178  1.1.1.2.20.2  jdolecek     AcpiGpeCount                        = 0;
    179  1.1.1.2.20.2  jdolecek 
    180  1.1.1.2.20.2  jdolecek     for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
    181  1.1.1.2.20.2  jdolecek     {
    182  1.1.1.2.20.2  jdolecek         AcpiFixedEventCount[i]              = 0;
    183  1.1.1.2.20.2  jdolecek     }
    184  1.1.1.2.20.2  jdolecek 
    185  1.1.1.2.20.2  jdolecek #if (!ACPI_REDUCED_HARDWARE)
    186  1.1.1.2.20.2  jdolecek 
    187  1.1.1.2.20.2  jdolecek     /* GPE/SCI support */
    188  1.1.1.2.20.2  jdolecek 
    189  1.1.1.2.20.2  jdolecek     AcpiGbl_AllGpesInitialized          = FALSE;
    190  1.1.1.2.20.2  jdolecek     AcpiGbl_GpeXruptListHead            = NULL;
    191  1.1.1.2.20.2  jdolecek     AcpiGbl_GpeFadtBlocks[0]            = NULL;
    192  1.1.1.2.20.2  jdolecek     AcpiGbl_GpeFadtBlocks[1]            = NULL;
    193  1.1.1.2.20.2  jdolecek     AcpiCurrentGpeCount                 = 0;
    194  1.1.1.2.20.2  jdolecek 
    195  1.1.1.2.20.2  jdolecek     AcpiGbl_GlobalEventHandler          = NULL;
    196  1.1.1.2.20.2  jdolecek     AcpiGbl_SciHandlerList              = NULL;
    197  1.1.1.2.20.2  jdolecek 
    198  1.1.1.2.20.2  jdolecek #endif /* !ACPI_REDUCED_HARDWARE */
    199  1.1.1.2.20.2  jdolecek 
    200  1.1.1.2.20.2  jdolecek     /* Global handlers */
    201  1.1.1.2.20.2  jdolecek 
    202  1.1.1.2.20.2  jdolecek     AcpiGbl_GlobalNotify[0].Handler     = NULL;
    203  1.1.1.2.20.2  jdolecek     AcpiGbl_GlobalNotify[1].Handler     = NULL;
    204  1.1.1.2.20.2  jdolecek     AcpiGbl_ExceptionHandler            = NULL;
    205  1.1.1.2.20.2  jdolecek     AcpiGbl_InitHandler                 = NULL;
    206  1.1.1.2.20.2  jdolecek     AcpiGbl_TableHandler                = NULL;
    207  1.1.1.2.20.2  jdolecek     AcpiGbl_InterfaceHandler            = NULL;
    208  1.1.1.2.20.2  jdolecek 
    209  1.1.1.2.20.2  jdolecek     /* Global Lock support */
    210  1.1.1.2.20.2  jdolecek 
    211  1.1.1.2.20.2  jdolecek     AcpiGbl_GlobalLockSemaphore         = NULL;
    212  1.1.1.2.20.2  jdolecek     AcpiGbl_GlobalLockMutex             = NULL;
    213  1.1.1.2.20.2  jdolecek     AcpiGbl_GlobalLockAcquired          = FALSE;
    214  1.1.1.2.20.2  jdolecek     AcpiGbl_GlobalLockHandle            = 0;
    215  1.1.1.2.20.2  jdolecek     AcpiGbl_GlobalLockPresent           = FALSE;
    216  1.1.1.2.20.2  jdolecek 
    217  1.1.1.2.20.2  jdolecek     /* Miscellaneous variables */
    218  1.1.1.2.20.2  jdolecek 
    219  1.1.1.2.20.2  jdolecek     AcpiGbl_DSDT                        = NULL;
    220  1.1.1.2.20.2  jdolecek     AcpiGbl_CmSingleStep                = FALSE;
    221  1.1.1.2.20.2  jdolecek     AcpiGbl_Shutdown                    = FALSE;
    222  1.1.1.2.20.2  jdolecek     AcpiGbl_NsLookupCount               = 0;
    223  1.1.1.2.20.2  jdolecek     AcpiGbl_PsFindCount                 = 0;
    224  1.1.1.2.20.2  jdolecek     AcpiGbl_AcpiHardwarePresent         = TRUE;
    225  1.1.1.2.20.2  jdolecek     AcpiGbl_LastOwnerIdIndex            = 0;
    226  1.1.1.2.20.2  jdolecek     AcpiGbl_NextOwnerIdOffset           = 0;
    227  1.1.1.2.20.2  jdolecek     AcpiGbl_DebuggerConfiguration       = DEBUGGER_THREADING;
    228  1.1.1.2.20.2  jdolecek     AcpiGbl_OsiMutex                    = NULL;
    229  1.1.1.2.20.2  jdolecek 
    230  1.1.1.2.20.2  jdolecek     /* Hardware oriented */
    231  1.1.1.2.20.2  jdolecek 
    232  1.1.1.2.20.2  jdolecek     AcpiGbl_EventsInitialized           = FALSE;
    233  1.1.1.2.20.2  jdolecek     AcpiGbl_SystemAwakeAndRunning       = TRUE;
    234  1.1.1.2.20.2  jdolecek 
    235  1.1.1.2.20.2  jdolecek     /* Namespace */
    236  1.1.1.2.20.2  jdolecek 
    237  1.1.1.2.20.2  jdolecek     AcpiGbl_ModuleCodeList              = NULL;
    238  1.1.1.2.20.2  jdolecek     AcpiGbl_RootNode                    = NULL;
    239  1.1.1.2.20.2  jdolecek     AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
    240  1.1.1.2.20.2  jdolecek     AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
    241  1.1.1.2.20.2  jdolecek     AcpiGbl_RootNodeStruct.Type         = ACPI_TYPE_DEVICE;
    242  1.1.1.2.20.2  jdolecek     AcpiGbl_RootNodeStruct.Parent       = NULL;
    243  1.1.1.2.20.2  jdolecek     AcpiGbl_RootNodeStruct.Child        = NULL;
    244  1.1.1.2.20.2  jdolecek     AcpiGbl_RootNodeStruct.Peer         = NULL;
    245  1.1.1.2.20.2  jdolecek     AcpiGbl_RootNodeStruct.Object       = NULL;
    246  1.1.1.2.20.2  jdolecek 
    247  1.1.1.2.20.2  jdolecek 
    248  1.1.1.2.20.2  jdolecek #ifdef ACPI_DISASSEMBLER
    249  1.1.1.2.20.2  jdolecek     AcpiGbl_ExternalList                = NULL;
    250  1.1.1.2.20.2  jdolecek     AcpiGbl_NumExternalMethods          = 0;
    251  1.1.1.2.20.2  jdolecek     AcpiGbl_ResolvedExternalMethods     = 0;
    252  1.1.1.2.20.2  jdolecek #endif
    253  1.1.1.2.20.2  jdolecek 
    254  1.1.1.2.20.2  jdolecek #ifdef ACPI_DEBUG_OUTPUT
    255  1.1.1.2.20.2  jdolecek     AcpiGbl_LowestStackPointer          = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX);
    256  1.1.1.2.20.2  jdolecek #endif
    257  1.1.1.2.20.2  jdolecek 
    258  1.1.1.2.20.2  jdolecek #ifdef ACPI_DBG_TRACK_ALLOCATIONS
    259  1.1.1.2.20.2  jdolecek     AcpiGbl_DisplayFinalMemStats        = FALSE;
    260  1.1.1.2.20.2  jdolecek     AcpiGbl_DisableMemTracking          = FALSE;
    261  1.1.1.2.20.2  jdolecek #endif
    262  1.1.1.2.20.2  jdolecek 
    263  1.1.1.2.20.2  jdolecek     return_ACPI_STATUS (AE_OK);
    264  1.1.1.2.20.2  jdolecek }
    265  1.1.1.2.20.2  jdolecek 
    266  1.1.1.2.20.2  jdolecek 
    267  1.1.1.2.20.1       tls /******************************************************************************
    268  1.1.1.2.20.1       tls  *
    269  1.1.1.2.20.1       tls  * FUNCTION:    AcpiUtTerminate
    270  1.1.1.2.20.1       tls  *
    271  1.1.1.2.20.1       tls  * PARAMETERS:  none
    272  1.1.1.2.20.1       tls  *
    273  1.1.1.2.20.1       tls  * RETURN:      none
    274  1.1.1.2.20.1       tls  *
    275  1.1.1.2.20.1       tls  * DESCRIPTION: Free global memory
    276  1.1.1.2.20.1       tls  *
    277  1.1.1.2.20.1       tls  ******************************************************************************/
    278           1.1    jruoho 
    279  1.1.1.2.20.1       tls static void
    280  1.1.1.2.20.1       tls AcpiUtTerminate (
    281  1.1.1.2.20.1       tls     void)
    282  1.1.1.2.20.1       tls {
    283  1.1.1.2.20.1       tls     ACPI_FUNCTION_TRACE (UtTerminate);
    284  1.1.1.2.20.1       tls 
    285  1.1.1.2.20.1       tls     AcpiUtFreeGpeLists ();
    286  1.1.1.2.20.1       tls     AcpiUtDeleteAddressLists ();
    287           1.1    jruoho     return_VOID;
    288           1.1    jruoho }
    289           1.1    jruoho 
    290           1.1    jruoho 
    291           1.1    jruoho /*******************************************************************************
    292           1.1    jruoho  *
    293           1.1    jruoho  * FUNCTION:    AcpiUtSubsystemShutdown
    294           1.1    jruoho  *
    295           1.1    jruoho  * PARAMETERS:  None
    296           1.1    jruoho  *
    297           1.1    jruoho  * RETURN:      None
    298           1.1    jruoho  *
    299           1.1    jruoho  * DESCRIPTION: Shutdown the various components. Do not delete the mutex
    300           1.1    jruoho  *              objects here, because the AML debugger may be still running.
    301           1.1    jruoho  *
    302           1.1    jruoho  ******************************************************************************/
    303           1.1    jruoho 
    304           1.1    jruoho void
    305           1.1    jruoho AcpiUtSubsystemShutdown (
    306           1.1    jruoho     void)
    307           1.1    jruoho {
    308           1.1    jruoho     ACPI_FUNCTION_TRACE (UtSubsystemShutdown);
    309           1.1    jruoho 
    310           1.1    jruoho 
    311  1.1.1.2.20.2  jdolecek     /* Just exit if subsystem is already shutdown */
    312  1.1.1.2.20.2  jdolecek 
    313  1.1.1.2.20.2  jdolecek     if (AcpiGbl_Shutdown)
    314  1.1.1.2.20.2  jdolecek     {
    315  1.1.1.2.20.2  jdolecek         ACPI_ERROR ((AE_INFO, "ACPI Subsystem is already terminated"));
    316  1.1.1.2.20.2  jdolecek         return_VOID;
    317  1.1.1.2.20.2  jdolecek     }
    318  1.1.1.2.20.2  jdolecek 
    319  1.1.1.2.20.2  jdolecek     /* Subsystem appears active, go ahead and shut it down */
    320  1.1.1.2.20.2  jdolecek 
    321  1.1.1.2.20.2  jdolecek     AcpiGbl_Shutdown = TRUE;
    322  1.1.1.2.20.2  jdolecek     AcpiGbl_StartupFlags = 0;
    323  1.1.1.2.20.2  jdolecek     ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Shutting down ACPI Subsystem\n"));
    324  1.1.1.2.20.2  jdolecek 
    325           1.1    jruoho #ifndef ACPI_ASL_COMPILER
    326           1.1    jruoho 
    327           1.1    jruoho     /* Close the AcpiEvent Handling */
    328           1.1    jruoho 
    329           1.1    jruoho     AcpiEvTerminate ();
    330       1.1.1.2    jruoho 
    331       1.1.1.2    jruoho     /* Delete any dynamic _OSI interfaces */
    332       1.1.1.2    jruoho 
    333       1.1.1.2    jruoho     AcpiUtInterfaceTerminate ();
    334           1.1    jruoho #endif
    335           1.1    jruoho 
    336           1.1    jruoho     /* Close the Namespace */
    337           1.1    jruoho 
    338           1.1    jruoho     AcpiNsTerminate ();
    339           1.1    jruoho 
    340           1.1    jruoho     /* Delete the ACPI tables */
    341           1.1    jruoho 
    342           1.1    jruoho     AcpiTbTerminate ();
    343           1.1    jruoho 
    344           1.1    jruoho     /* Close the globals */
    345           1.1    jruoho 
    346           1.1    jruoho     AcpiUtTerminate ();
    347           1.1    jruoho 
    348           1.1    jruoho     /* Purge the local caches */
    349           1.1    jruoho 
    350           1.1    jruoho     (void) AcpiUtDeleteCaches ();
    351           1.1    jruoho     return_VOID;
    352           1.1    jruoho }
    353