Difference between revisions of "ACPI"
Jump to navigation
Jump to search
(ACPI bytecode generator) |
|||
Line 194: | Line 194: | ||
* make sure that you reserve _RAMBASE - LB_MEM_TOPK | * make sure that you reserve _RAMBASE - LB_MEM_TOPK | ||
* SMP might need some fixes | * SMP might need some fixes | ||
=== ACPI bytecode generator === | |||
Some ACPI stuff is generated runtime. To achieve this goal we have a AML code generator which generates binary | |||
ACPI bytecode. Such code then resides typically in SSDT table. There is a helper function which creates such | |||
table - acpi_create_ssdt_generator(). The content of the table is created through callback function acpi_fill_ssdt_generator(). So far we have two big users of the generator k8acpi_write_vars() and amd_model_fxx_generate_powernow(). The first function will generate some runtime configuration of HT bus and PCI decode ranges. Second function generates the P-States. | |||
The available functions are in acpigen.h. Mostly there are functions generating some primitive named data structures. However sometime is necessary to put more data to a package. ACPI AML code needs to know the block | |||
lengths. The len is unknown until we have filled the payload of such package. Therefore when we are done, we need | |||
to call function acpigen_patch_len(int len) which will patch last object (package) which need patching. It uses | |||
stack internally so more structures can be nested. Look to acpigen.c and learn what functions call acpigen_write_len_f() - those needs patching. | |||
=== Debugging ACPI === | === Debugging ACPI === |