^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Module Name: utxfinit - External interfaces for ACPICA initialization
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (C) 2000 - 2020, Intel Corp.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *****************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define EXPORT_ACPI_INTERFACES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <acpi/acpi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include "accommon.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include "acevents.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include "acnamesp.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include "acdebug.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include "actables.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define _COMPONENT ACPI_UTILITIES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) ACPI_MODULE_NAME("utxfinit")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) /* For acpi_exec only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) void ae_do_object_overrides(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * FUNCTION: acpi_initialize_subsystem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * PARAMETERS: None
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * RETURN: Status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * DESCRIPTION: Initializes all global variables. This is the first function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * called, so any early initialization belongs here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) acpi_status status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) ACPI_FUNCTION_TRACE(acpi_initialize_subsystem);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) acpi_gbl_startup_flags = ACPI_SUBSYSTEM_INITIALIZE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace());
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) /* Initialize the OS-Dependent layer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) status = acpi_os_initialize();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ACPI_EXCEPTION((AE_INFO, status, "During OSL initialization"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) /* Initialize all globals used by the subsystem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) status = acpi_ut_init_globals();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) ACPI_EXCEPTION((AE_INFO, status,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) "During initialization of globals"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) /* Create the default mutex objects */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) status = acpi_ut_mutex_initialize();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) ACPI_EXCEPTION((AE_INFO, status,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) "During Global Mutex creation"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) * Initialize the namespace manager and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) * the root of the namespace tree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) status = acpi_ns_root_initialize();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) ACPI_EXCEPTION((AE_INFO, status,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) "During Namespace initialization"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) /* Initialize the global OSI interfaces list with the static names */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) status = acpi_ut_initialize_interfaces();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) ACPI_EXCEPTION((AE_INFO, status,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) "During OSI interfaces initialization"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) return_ACPI_STATUS(AE_OK);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) ACPI_EXPORT_SYMBOL_INIT(acpi_initialize_subsystem)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) * FUNCTION: acpi_enable_subsystem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) * PARAMETERS: flags - Init/enable Options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) * RETURN: Status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * DESCRIPTION: Completes the subsystem initialization including hardware.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) * Puts system into ACPI mode if it isn't already.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) acpi_status ACPI_INIT_FUNCTION acpi_enable_subsystem(u32 flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) acpi_status status = AE_OK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) ACPI_FUNCTION_TRACE(acpi_enable_subsystem);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) * The early initialization phase is complete. The namespace is loaded,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) * and we can now support address spaces other than Memory, I/O, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) * PCI_Config.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) acpi_gbl_early_initialization = FALSE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #if (!ACPI_REDUCED_HARDWARE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /* Enable ACPI mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) if (!(flags & ACPI_NO_ACPI_ENABLE)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) "[Init] Going into ACPI mode\n"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) acpi_gbl_original_mode = acpi_hw_get_mode();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) status = acpi_enable();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) ACPI_WARNING((AE_INFO, "AcpiEnable failed"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) * Obtain a permanent mapping for the FACS. This is required for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) * Global Lock and the Firmware Waking Vector
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) if (!(flags & ACPI_NO_FACS_INIT)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) status = acpi_tb_initialize_facs();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) * Initialize ACPI Event handling (Fixed and General Purpose)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) * Note1: We must have the hardware and events initialized before we can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) * execute any control methods safely. Any control method can require
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) * ACPI hardware support, so the hardware must be fully initialized before
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) * any method execution!
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) * Note2: Fixed events are initialized and enabled here. GPEs are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) * initialized, but cannot be enabled until after the hardware is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) * completely initialized (SCI and global_lock activated) and the various
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) * initialization control methods are run (_REG, _STA, _INI) on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) * entire namespace.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) if (!(flags & ACPI_NO_EVENT_INIT)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) "[Init] Initializing ACPI events\n"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) status = acpi_ev_initialize_events();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) * Install the SCI handler and Global Lock handler. This completes the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) * hardware initialization.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) if (!(flags & ACPI_NO_HANDLER_INIT)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) "[Init] Installing SCI/GL handlers\n"));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) status = acpi_ev_install_xrupt_handlers();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #endif /* !ACPI_REDUCED_HARDWARE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) ACPI_EXPORT_SYMBOL_INIT(acpi_enable_subsystem)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) * FUNCTION: acpi_initialize_objects
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) * PARAMETERS: flags - Init/enable Options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) * RETURN: Status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) * DESCRIPTION: Completes namespace initialization by initializing device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) * objects and executing AML code for Regions, buffers, etc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) acpi_status ACPI_INIT_FUNCTION acpi_initialize_objects(u32 flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) acpi_status status = AE_OK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) ACPI_FUNCTION_TRACE(acpi_initialize_objects);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #ifdef ACPI_OBSOLETE_BEHAVIOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) * 05/2019: Removed, initialization now happens at both object
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) * creation and table load time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) * Initialize the objects that remain uninitialized. This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) * runs the executable AML that may be part of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) * declaration of these objects: operation_regions, buffer_fields,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) * bank_fields, Buffers, and Packages.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) if (!(flags & ACPI_NO_OBJECT_INIT)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) status = acpi_ns_initialize_objects();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) * Initialize all device/region objects in the namespace. This runs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) * the device _STA and _INI methods and region _REG methods.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) if (!(flags & (ACPI_NO_DEVICE_INIT | ACPI_NO_ADDRESS_SPACE_INIT))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) status = acpi_ns_initialize_devices(flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) if (ACPI_FAILURE(status)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) * Empty the caches (delete the cached objects) on the assumption that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) * the table load filled them up more than they will be at runtime --
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) * thus wasting non-paged memory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) status = acpi_purge_cached_objects();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) acpi_gbl_startup_flags |= ACPI_INITIALIZED_OK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) return_ACPI_STATUS(status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) ACPI_EXPORT_SYMBOL_INIT(acpi_initialize_objects)