static int __init acpi_init (void) { int result = 0; ACPI_FUNCTION_TRACE("acpi_init"); printk(KERN_INFO PREFIX "Subsystem revision %08x\n", ACPI_CA_VERSION); if (acpi_disabled) { printk(KERN_INFO PREFIX "Interpreter disabled.\n"); return_VALUE(-ENODEV); } firmware_register(&acpi_subsys); result = acpi_bus_init(); if (!result) { #ifdef CONFIG_PM if (!PM_IS_ACTIVE()) pm_active = 1; else { printk(KERN_INFO PREFIX "APM is already active, exiting\n"); disable_acpi(); result = -ENODEV; } #endif } else disable_acpi(); return_VALUE(result); }
/* * Just start the APM thread. We do NOT want to do APM BIOS * calls from anything but the APM thread, if for no other reason * than the fact that we don't trust the APM BIOS. This way, * most common APM BIOS problems that lead to protection errors * etc will have at least some level of being contained... * * In short, if something bad happens, at least we have a choice * of just killing the apm thread.. */ static int __init apm_init(void) { if (apm_bios_info.version == 0) { printk(KERN_INFO "apm: BIOS not found.\n"); APM_INIT_ERROR_RETURN; } printk(KERN_INFO "apm: BIOS version %d.%d Flags 0x%02x (Driver version %s)\n", ((apm_bios_info.version >> 8) & 0xff), (apm_bios_info.version & 0xff), apm_bios_info.flags, driver_version); if (apm_disabled) { printk(KERN_NOTICE "apm: disabled on user request.\n"); APM_INIT_ERROR_RETURN; } if (PM_IS_ACTIVE()) { printk(KERN_NOTICE "apm: overridden by ACPI.\n"); APM_INIT_ERROR_RETURN; } pm_active = 1; create_proc_info_entry("apm", 0, NULL, apm_get_info); misc_register(&apm_device); pm_power_off = pm_do_poweroff; clear_dpcsr(); return 0; }