ACPICA: Additional 2016 copyright changes
[deliverable/linux.git] / drivers / acpi / acpica / utxfinit.c
index a7137ec2844789240c44a7a42d6358e7839d880b..721b87cce90865c8c3d20295b664cf2665de84b6 100644 (file)
@@ -5,7 +5,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -147,6 +147,28 @@ acpi_status __init acpi_enable_subsystem(u32 flags)
 
        ACPI_FUNCTION_TRACE(acpi_enable_subsystem);
 
+       /*
+        * The early initialization phase is complete. The namespace is loaded,
+        * and we can now support address spaces other than Memory, I/O, and
+        * PCI_Config.
+        */
+       acpi_gbl_early_initialization = FALSE;
+
+       /*
+        * Install the default operation region handlers. These are the
+        * handlers that are defined by the ACPI specification to be
+        * "always accessible" -- namely, system_memory, system_IO, and
+        * PCI_Config. This also means that no _REG methods need to be
+        * run for these address spaces. We need to have these handlers
+        * installed before any AML code can be executed, especially any
+        * module-level code (11/2015).
+        */
+       status = acpi_ev_install_region_handlers();
+       if (ACPI_FAILURE(status)) {
+               ACPI_EXCEPTION((AE_INFO, status,
+                               "During Region initialization"));
+               return_ACPI_STATUS(status);
+       }
 #if (!ACPI_REDUCED_HARDWARE)
 
        /* Enable ACPI mode */
@@ -175,23 +197,7 @@ acpi_status __init acpi_enable_subsystem(u32 flags)
                        return_ACPI_STATUS(status);
                }
        }
-#endif                         /* !ACPI_REDUCED_HARDWARE */
-
-       /*
-        * Install the default op_region handlers. These are installed unless
-        * other handlers have already been installed via the
-        * install_address_space_handler interface.
-        */
-       if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
-                                 "[Init] Installing default address space handlers\n"));
 
-               status = acpi_ev_install_region_handlers();
-               if (ACPI_FAILURE(status)) {
-                       return_ACPI_STATUS(status);
-               }
-       }
-#if (!ACPI_REDUCED_HARDWARE)
        /*
         * Initialize ACPI Event handling (Fixed and General Purpose)
         *
@@ -261,6 +267,7 @@ acpi_status __init acpi_initialize_objects(u32 flags)
         * initialized, even if they contain executable AML (see the call to
         * acpi_ns_initialize_objects below).
         */
+       acpi_gbl_reg_methods_enabled = TRUE;
        if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
                ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
                                  "[Init] Executing _REG OpRegion methods\n"));
@@ -285,8 +292,14 @@ acpi_status __init acpi_initialize_objects(u32 flags)
         * 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.
+        *
+        * This case executes the module-level code for all tables only after
+        * all of the tables have been loaded. It is a legacy option and is
+        * not compatible with other ACPI implementations. See acpi_ns_load_table.
         */
-       acpi_ns_exec_module_code_list();
+       if (acpi_gbl_group_module_level_code) {
+               acpi_ns_exec_module_code_list();
+       }
 
        /*
         * Initialize the objects that remain uninitialized. This runs the
This page took 0.02741 seconds and 5 git commands to generate.