]> xenbits.xen.org Git - xenclient/ioemu-pq.git/commitdiff
Support to inject most power management SCIs on demand.
authorroot <root@localhost.localdomain>
Wed, 10 Jun 2009 20:08:12 +0000 (16:08 -0400)
committerroot <root@localhost.localdomain>
Wed, 10 Jun 2009 20:08:12 +0000 (16:08 -0400)
Inject power, sleep button press and lid close SCIs only when requested through inject-sci configuration option (default is to let xenmgr handle this).

master/battery-management

index b5e1a999bada24ba8e3373085a50556e22a765f1..dc43f55e5c263c06b6188812c777226cb13f144e 100644 (file)
@@ -187,7 +187,7 @@ index c45bf9f..8c1debd 100644
                                           uint32_t build_nr);
  
 diff --git a/xenstore.c b/xenstore.c
-index 99b31fd..6f5b073 100644
+index 99b31fd..dd65438 100644
 --- a/xenstore.c
 +++ b/xenstore.c
 @@ -27,6 +27,7 @@
@@ -245,16 +245,29 @@ index 99b31fd..6f5b073 100644
  static int xenstore_extended_power_mgmt_write(const char *key, const char *value)
  {
      int ret;
-@@ -1425,6 +1459,24 @@ int xenstore_refresh_battery_status(void)
+@@ -1425,6 +1459,37 @@ int xenstore_refresh_battery_status(void)
      return xenstore_extended_power_mgmt_event_trigger("refreshbatterystatus", "1");
  }
  
 +void xenstore_register_for_pm_events(void)
 +{
-+   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");
++    char *inject_sci_buffer;
++    uint inject_sci = 0;
++
++    xs_watch(xsh, "/pm/events/acadapterstatechanged", "acadapterstatechangeevt");
++    inject_sci_buffer = xenstore_device_model_read(domid, "inject-sci", NULL);
++    if ( inject_sci_buffer == NULL )
++        return;
++
++    inject_sci = strtoull(inject_sci, NULL, 10);
++    if ( inject_sci != 0 )
++    {
++        xs_watch(xsh, "/pm/events/lidstatechanged", "lidstatechangeevt");
++        xs_watch(xsh, "/pm/events/powerbuttonpressed", "pwrbuttonpressedevt");
++        xs_watch(xsh, "/pm/events/sleepbuttonpressed", "slpbuttonpressedevt");
++    }
++
++    free(inject_sci_buffer);
 +}
 +
 +int xenstore_read_ac_adapter_state(void)