void acpi_php_del(int);
void acpi_ac_adapter_state_changed(void);
void acpi_power_button_pressed(void);
+void acpi_sleep_button_pressed(void);
void acpi_lid_state_changed(void);
void acpi_oem_event(void);
#define ACPI_PHP_GPE_BIT 3
#define ACPI_AC_POWER_STATE_BIT 0x1c
#define ACPI_POWER_BUTTON_BIT 0x1
+#define ACPI_SLEEP_BUTTON_BIT 0x0
#define ACPI_LID_STATE_BIT 0x17
#define ACPI_OEM_EVENT_BIT 0x18
#define ACPI_PHP_SLOT_NUM PHP_SLOT_LEN
}
}
+void acpi_sleep_button_pressed(void)
+{
+ GPEState *s = &gpe_state;
+
+ if ( !test_bit(&s->gpe0_sts[0], ACPI_SLEEP_BUTTON_BIT) &&
+ test_bit(&s->gpe0_en[0], ACPI_SLEEP_BUTTON_BIT) ) {
+ set_bit(&s->gpe0_sts[0], ACPI_SLEEP_BUTTON_BIT);
+ s->sci_asserted = 1;
+ qemu_irq_raise(sci_irq);
+ }
+}
+
void acpi_lid_state_changed(void)
{
GPEState *s = &gpe_state;
goto out;
}
+ if (!strcmp(vec[XS_WATCH_TOKEN], "slpbuttonpressedevt")) {
+ acpi_sleep_button_pressed();
+ }
+
if (!strcmp(vec[XS_WATCH_TOKEN], "lidstatechangeevt")) {
acpi_lid_state_changed();
goto out;
xs_watch(xsh, "/pm/events/acadapterstatechanged", "acadapterstatechangeevt");
xs_watch(xsh, "/pm/events/lidstatechanged", "lidstatechangeevt");
xs_watch(xsh, "/pm/events/powerbuttonpressed", "pwrbuttonpressedevt");
+ xs_watch(xsh, "/pm/events/sleepbuttonpressed", "slpbuttonpressedevt");
}
void xenstore_register_for_oem_events(void)