全部博文(120)
分类: LINUX
2008-05-02 23:05:34
a) Reserve low memory region for sleep support.( acpi_reserve_bootmem)
* acpi_reserve_bootmem - do _very_ early ACPI initialization
* We allocate a page from the first 1MB of memory for the wakeup
* routine for when we come back from a sleep state. The
* runtime allocator allows specification of <16MB pages, but not
if ((&wakeup_end - &wakeup_start) > PAGE_SIZE*2) {
"ACPI: Wakeup code way too big, S3 disabled.\n");
acpi_wakeup_address = (unsigned long)alloc_bootmem_low(PAGE_SIZE*2);
if (!acpi_wakeup_address)
printk(KERN_ERR "ACPI: Cannot allocate lowmem, S3 disabled.\n");
b) The ACPI boot-time table parser. (acpi_boot_table_init)
c) Read APIC and some other early information from ACPI tables. (acpi_boot_init)
start_kernel(init/main.c)->setup_arch(arch/x86/kernel/setup.c)-> acpi_boot_table_init, acpi_boot_init(x86/kernel/acpi/boot.c)
I. reallocate ACPI tables. (acpi_reallocate_root_table)
II. Initializes all global variables (initialize_subsystem)
III. load the System Description Tables.( acpi_load_tables)
IV. enable ACPI. (acpi_enable_subsystem)