Esempio n. 1
0
/*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;
	}
}
Esempio n. 2
0
void
do_poweroff(int n, char *va)
{
	acpi_enable();
	acpi_poweroff();
	return;
}
Esempio n. 3
0
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 ();
}
Esempio n. 4
0
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();
}