domain will be restarted with the same configuration</dd>
</dl>
+ <h3><a name="elementsPowerManagement">Power Management</a></h3>
+
+ <p>
+ <span class="since">Since 0.10.2</span> it is possible to
+ forcibly enable or disable BIOS advertisements to the guest
+ OS. (NB: Only qemu driver support)
+ </p>
+
+<pre>
+ ...
+ <pm>
+ <suspend-to-disk enabled='no'/>
+ <suspend-to-ram enabled='yes'/>
+ </pm>
+ ...</pre>
+
+ <dl>
+ <dt><code>pm</code></dt>
+ <dd>These elements enable ('yes') or disable ('no') BIOS support
+ for S3 (suspend-to-disk) and S4 (suspend-to-mem) ACPI sleep
+ states. If nothing is specified, then the hypervisor will be
+ left with its default value.</dd>
+ </dl>
+
<h3><a name="elementsFeatures">Hypervisor features</a></h3>
<p>
<ref name="resources"/>
<ref name="features"/>
<ref name="termination"/>
+ <optional>
+ <ref name="pm"/>
+ </optional>
<optional>
<ref name="devices"/>
</optional>
<value>coredump-restart</value>
</choice>
</define>
+ <!--
+ Control ACPI sleep states (dis)allowed for the domain
+ For each of the states the following rules apply:
+ on: the state will be forcefully enabled
+ off: the state will be forcefully disabled
+ not specified: hypervisor will be left to decide its defaults
+ -->
+ <define name="pm">
+ <element name="pm">
+ <interleave>
+ <optional>
+ <element name="suspend-to-mem">
+ <ref name="suspendChoices"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suspend-to-disk">
+ <ref name="suspendChoices"/>
+ </element>
+ </optional>
+ </interleave>
+ <empty/>
+ </element>
+ </define>
+ <define name="suspendChoices">
+ <optional>
+ <attribute name="enabled">
+ <choice>
+ <value>yes</value>
+ <value>no</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
<!--
Specific setup for a qemu emulated character device. Note: this
definition doesn't fully specify the constraints on this node.
"coredump-destroy",
"coredump-restart")
+VIR_ENUM_IMPL(virDomainPMState, VIR_DOMAIN_PM_STATE_LAST,
+ "default",
+ "yes",
+ "no")
+
VIR_ENUM_IMPL(virDomainDevice, VIR_DOMAIN_DEVICE_LAST,
"none",
"disk",
return 0;
}
+static int
+virDomainPMStateParseXML(xmlXPathContextPtr ctxt,
+ const char *xpath,
+ int *val)
+{
+ int ret = -1;
+ char *tmp = virXPathString(xpath, ctxt);
+ if (tmp) {
+ *val = virDomainPMStateTypeFromString(tmp);
+ if (*val < 0) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("unknown PM state value %s"), tmp);
+ goto cleanup;
+ }
+ }
+
+ ret = 0;
+ cleanup:
+ VIR_FREE(tmp);
+ return ret;
+}
+
virDomainDeviceDefPtr virDomainDeviceDefParse(virCapsPtr caps,
virDomainDefPtr def,
const char *xmlStr,
virDomainLifecycleCrashTypeFromString) < 0)
goto error;
+ if (virDomainPMStateParseXML(ctxt,
+ "string(./pm/suspend-to-mem/@enabled)",
+ &def->pm.s3) < 0)
+ goto error;
+
+ if (virDomainPMStateParseXML(ctxt,
+ "string(./pm/suspend-to-disk/@enabled)",
+ &def->pm.s4) < 0)
+ goto error;
+
tmp = virXPathString("string(./clock/@offset)", ctxt);
if (tmp) {
if ((def->clock.offset = virDomainClockOffsetTypeFromString(tmp)) < 0) {
virDomainLifecycleCrashTypeToString) < 0)
goto cleanup;
+ if (def->pm.s3 || def->pm.s4) {
+ virBufferAddLit(buf, " <pm>\n");
+ if (def->pm.s3) {
+ virBufferAsprintf(buf, " <suspend-to-mem enabled='%s'/>\n",
+ virDomainPMStateTypeToString(def->pm.s3));
+ }
+ if (def->pm.s4) {
+ virBufferAsprintf(buf, " <suspend-to-disk enabled='%s'/>\n",
+ virDomainPMStateTypeToString(def->pm.s4));
+ }
+ virBufferAddLit(buf, " </pm>\n");
+ }
+
virBufferAddLit(buf, " <devices>\n");
virBufferEscapeString(buf, " <emulator>%s</emulator>\n",
VIR_DOMAIN_LIFECYCLE_CRASH_LAST
};
+enum virDomainPMState {
+ VIR_DOMAIN_PM_STATE_DEFAULT = 0,
+ VIR_DOMAIN_PM_STATE_ENABLED,
+ VIR_DOMAIN_PM_STATE_DISABLED,
+
+ VIR_DOMAIN_PM_STATE_LAST,
+};
+
enum virDomainBIOSUseserial {
VIR_DOMAIN_BIOS_USESERIAL_DEFAULT = 0,
VIR_DOMAIN_BIOS_USESERIAL_YES,
int onPoweroff;
int onCrash;
+ struct {
+ /* These options are actually type of enum virDomainPMState */
+ int s3;
+ int s4;
+ } pm;
+
virDomainOSDef os;
char *emulator;
int features;
VIR_ENUM_DECL(virDomainFeature)
VIR_ENUM_DECL(virDomainLifecycle)
VIR_ENUM_DECL(virDomainLifecycleCrash)
+VIR_ENUM_DECL(virDomainPMState)
VIR_ENUM_DECL(virDomainDevice)
VIR_ENUM_DECL(virDomainDeviceAddress)
VIR_ENUM_DECL(virDomainDisk)
virDomainPausedReasonTypeToString;
virDomainPciRombarModeTypeFromString;
virDomainPciRombarModeTypeToString;
+virDomainPMStateTypeFromString;
+virDomainPMStateTypeToString;
virDomainRedirdevBusTypeFromString;
virDomainRedirdevBusTypeToString;
virDomainRemoveInactive;