/*ARGSUSED*/ static void xen_uppc_shutdown(int cmd, int fcn) { XEN_UPPC_VERBOSE_POWEROFF(("xen_uppc_shutdown(%d,%d);\n", cmd, fcn)); switch (cmd) { case A_SHUTDOWN: switch (fcn) { case AD_BOOT: case AD_IBOOT: (void) HYPERVISOR_shutdown(SHUTDOWN_reboot); break; case AD_POWEROFF: /* fall through if domU or if poweroff fails */ if (DOMAIN_IS_INITDOMAIN(xen_info)) if (xen_uppc_enable_acpi) (void) acpi_poweroff(); /* FALLTHRU */ case AD_HALT: default: (void) HYPERVISOR_shutdown(SHUTDOWN_poweroff); break; } break; case A_REBOOT: (void) HYPERVISOR_shutdown(SHUTDOWN_reboot); break; default: return; } }
void do_poweroff(int n, char *va) { acpi_enable(); acpi_poweroff(); return; }
static void acpi_pm1_sleep (u32 v) { struct facs *facs; #ifdef ACPI_DSDT bool m[6]; int i; u8 n; #endif #ifdef ACPI_DSDT n = (v & PM1_CNT_SLP_TYPX_MASK) >> PM1_CNT_SLP_TYPX_SHIFT; for (i = 0; i <= 5; i++) { if (acpi_dsdt_system_state[i][0] && acpi_dsdt_system_state[i][1] == n) m[i] = true; else m[i] = false; } if (!m[2] && !m[3]) return; #endif facs = acpi_mapmem (facs_addr, sizeof *facs); if (IS_STRUCT_SIZE_OK (facs->length, facs, facs->x_firmware_waking_vector)) facs->x_firmware_waking_vector = 0; if (IS_STRUCT_SIZE_OK (facs->length, facs, facs->firmware_waking_vector)) facs->firmware_waking_vector = 0xFFFF0; else for (;;); /* FIXME: ERROR */ /* DEBUG */ /* the computer is going to sleep */ /* most devices are suspended */ /* vmm can't write anything to a screen here */ /* vmm can't input from/output to a keyboard here */ /* vmm can beep! */ beep_on (); beep_set_freq (880); usleep (500000); beep_set_freq (440); usleep (500000); beep_set_freq (880); usleep (500000); beep_set_freq (440); usleep (500000); beep_set_freq (880); usleep (500000); beep_set_freq (440); usleep (500000); beep_set_freq (880); acpi_poweroff (); }
void poweroff(void) { const char *shutdown_str; #ifdef USE_ACPI acpi_poweroff(); #endif /* Bochs/QEMU poweroff */ shutdown_str = "Shutdown"; while (*shutdown_str) outb(0x8900, *(shutdown_str++)); /* fallback option: hang */ for (; ; ) halt_cpu(); }
static __dead void poweroff(void) { const char *shutdown_str; #ifdef USE_ACPI acpi_poweroff(); #endif /* Bochs/QEMU poweroff */ shutdown_str = "Shutdown"; while (*shutdown_str) outb(0x8900, *(shutdown_str++)); /* VMware magic power off; likely to halt CPU */ poweroff_vmware_clihlt(); /* fallback option: hang */ halt(); }