/* * poweroff.c - ACPI handler for powering off the system. * * AKA S5, but it is independent of whether or not the kernel supports * any other sleep support in the system. */ #include <linux/pm.h> #include <linux/init.h> #include <acpi/acpi_bus.h> #include <linux/sched.h> #include "sleep.h" static void acpi_power_off (void) { printk("%s called\n",__FUNCTION__); /* Some SMP machines only can poweroff in boot CPU */ set_cpus_allowed(current, cpumask_of_cpu(0)); acpi_wakeup_gpe_poweroff_prepare(); acpi_enter_sleep_state_prep(ACPI_STATE_S5); ACPI_DISABLE_IRQS(); acpi_enter_sleep_state(ACPI_STATE_S5); } static int acpi_poweroff_init(void) { if (!acpi_disabled) { u8 type_a, type_b; acpi_status status; status = acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b); if (ACPI_SUCCESS(status)) pm_power_off = acpi_power_off; } return 0; } late_initcall(acpi_poweroff_init);