summaryrefslogtreecommitdiff
path: root/source/include/acpixf.h
diff options
context:
space:
mode:
authorErik Schmauss <erik.schmauss@intel.com>2019-01-08 10:54:24 -0800
committerErik Schmauss <erik.schmauss@intel.com>2019-01-08 10:54:24 -0800
commit47f5607c204719d9239a12b889df725225098c8f (patch)
tree7140044732dd4b751c64d7adc10edb0c2371fbb8 /source/include/acpixf.h
parentf446e7b05a9ba6497c6f2215167238015bfe757a (diff)
downloadacpica-47f5607c204719d9239a12b889df725225098c8f.tar.gz
Remove legacy module-level code support
Module-level code refers to executable ASL code that runs during table load. This is typically used in ASL to declare named objects based on a condition evaluated during table load like so: DefinitionBlock(...) { OpreationRegion (OPR1, SystemMemory, ...) Field (OPR1) { FLD1, 8 /* Assume that FLD1's value is 0x1 */ } /* The if statement below is referred to as module-level code */ If (FLD1) { /* Declare DEV1 conditionally */ Device (DEV1) {...} } Device (DEV2) { ... } } In legacy module-level code, the execution of the If statement was deferred after other modules were loaded. The order of code execution for the table above is the following: 1.) Load OPR1 to the ACPI Namespace 2.) Load FLD1 to the ACPI Namespace (not intended for drivers) 3.) Load DEV2 to the ACPI Namespace 4.) Execute If (FLD1) and load DEV1 if the condition is true This legacy approach can be problematic for tables that look like the following: DefinitionBlock(...) { OpreationRegion (OPR1, SystemMemory, ...) Field (OPR1) { FLD1, 8 /* Assume that FLD1's value is 0x1 */ } /* The if statement below is referred to as module-level code */ If (FLD1) { /* Declare DEV1 conditionally */ Device (DEV1) {...} } Scope (DEV1) { /* Add objects DEV1's scope */ Name (OBJ1, 0x1234) } } When loading this in the legacy approach, Scope DEV1 gets evaluated before the If statement. The following is the order of execution: 1.) Load OPR1 to the ACPI Namespace 2.) Load FLD1 to the ACPI Namespace (not intended for drivers) 3.) Add OBJ1 under DEV1's scope -- ERROR. DEV1 does not exist 4.) Execute If (FLD1) and load DEV1 if the condition is true The legacy approach can never succeed for tables like this due to the deferral of the module-level code. Due to this limitation, a new module-level code was developed. This new approach exeutes if statements in the order that they appear in the definition block. With this approach, the order of execution for the above defintion block is as follows: 1.) Load OPR1 to the ACPI Namespace 2.) Load FLD1 to the ACPI Namespace (not intended for drivers) 3.) Execute If (FLD1) and load DEV1 because the condition is true 4.) Add OBJ1 under DEV1's scope. Since DEV1 is loaded in the namespace in step 3, step 4 executes successfully. This change removes support for the legacy module-level code execution. From this point onward, the new module-level code execution will be the official approach. Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
Diffstat (limited to 'source/include/acpixf.h')
-rw-r--r--source/include/acpixf.h8
1 files changed, 0 insertions, 8 deletions
diff --git a/source/include/acpixf.h b/source/include/acpixf.h
index fa8030093..5791fc95d 100644
--- a/source/include/acpixf.h
+++ b/source/include/acpixf.h
@@ -301,14 +301,6 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_CopyDsdtLocally, FALSE);
ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE);
/*
- * Optionally support module level code by parsing an entire table as
- * a method as it is loaded. Default is TRUE.
- * NOTE, this is essentially obsolete and will be removed soon
- * (01/2018).
- */
-ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ExecuteTablesAsMethods, TRUE);
-
-/*
* Optionally use 32-bit FADT addresses if and when there is a conflict
* (address mismatch) between the 32-bit and 64-bit versions of the
* address. Although ACPICA adheres to the ACPI specification which