9119d9
From 343c98ebdcb3a75cf8a2b8b496da3887ec8f87c3 Mon Sep 17 00:00:00 2001
9119d9
Message-Id: <343c98ebdcb3a75cf8a2b8b496da3887ec8f87c3@dist-git>
9119d9
From: Michal Privoznik <mprivozn@redhat.com>
9119d9
Date: Wed, 10 Sep 2014 10:11:43 +0200
9119d9
Subject: [PATCH] conf: Extend <loader/> and introduce <nvram/>
9119d9
9119d9
https://bugzilla.redhat.com/show_bug.cgi?id=1112257
9119d9
9119d9
Up to now, users can configure BIOS via the <loader/> element. With
9119d9
the upcoming implementation of UEFI this is not enough as BIOS and
9119d9
UEFI are conceptually different. For instance, while BIOS is ROM, UEFI
9119d9
is programmable flash (although all writes to code section are
9119d9
denied). Therefore we need new attribute @type which will
9119d9
differentiate the two. Then, new attribute @readonly is introduced to
9119d9
reflect the fact that some images are RO.
9119d9
9119d9
Moreover, the OVMF (which is going to be used mostly), works in two
9119d9
modes:
9119d9
1) Code and UEFI variable store is mixed in one file.
9119d9
2) Code and UEFI variable store is separated in two files
9119d9
9119d9
The latter has advantage of updating the UEFI code without losing the
9119d9
configuration. However, in order to represent the latter case we need
9119d9
yet another XML element: <nvram/>. Currently, it has no additional
9119d9
attributes, it's just a bare element containing path to the variable
9119d9
store file.
9119d9
9119d9
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9119d9
Acked-by: Laszlo Ersek <lersek@redhat.com>
9119d9
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
9119d9
(cherry picked from commit 68bf13dbef8342eaee0bf57c73cebb60b7de11e8)
9119d9
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
9119d9
---
9119d9
 docs/formatdomain.html.in                          | 19 ++++-
9119d9
 docs/schemas/domaincommon.rng                      | 21 ++++++
9119d9
 src/conf/domain_conf.c                             | 87 +++++++++++++++++++++-
9119d9
 src/conf/domain_conf.h                             | 22 +++++-
9119d9
 src/libvirt_private.syms                           |  3 +
9119d9
 src/qemu/qemu_command.c                            |  5 +-
9119d9
 src/security/virt-aa-helper.c                      |  4 +-
9119d9
 src/vbox/vbox_common.c                             |  7 +-
9119d9
 src/xenapi/xenapi_driver.c                         |  3 +-
9119d9
 src/xenconfig/xen_common.c                         |  7 +-
9119d9
 src/xenconfig/xen_sxpr.c                           | 16 ++--
9119d9
 tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.xml | 40 ++++++++++
9119d9
 .../qemuxml2xmlout-pci-bridge-many-disks.xml       |  2 +-
9119d9
 tests/qemuxml2xmltest.c                            |  2 +
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-autoport.xml      |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-empty-kernel.xml  |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-force-hpet.xml    |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-force-nohpet.xml  |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml        |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-legacy-vfb.xml    |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml     |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-net-ioemu.xml     |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-net-netfront.xml  |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml  |  2 +-
9119d9
 .../sexpr2xml-fv-serial-dev-2-ports.xml            |  2 +-
9119d9
 .../sexpr2xml-fv-serial-dev-2nd-port.xml           |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml   |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml   |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml   |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml    |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml  |  2 +-
9119d9
 .../sexpr2xml-fv-serial-tcp-telnet.xml             |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml    |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml    |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml   |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-sound-all.xml     |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-sound.xml         |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml      |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml     |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-utc.xml           |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv-v2.xml            |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-fv.xml               |  2 +-
9119d9
 tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml  |  2 +-
9119d9
 tests/xmconfigdata/test-escape-paths.xml           |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-force-hpet.xml    |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-force-nohpet.xml  |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-localtime.xml     |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-net-ioemu.xml     |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-net-netfront.xml  |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-new-cdrom.xml     |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-old-cdrom.xml     |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-parallel-tcp.xml  |  2 +-
9119d9
 .../test-fullvirt-serial-dev-2-ports.xml           |  2 +-
9119d9
 .../test-fullvirt-serial-dev-2nd-port.xml          |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-serial-file.xml   |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-serial-null.xml   |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-serial-pipe.xml   |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-serial-pty.xml    |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-serial-stdio.xml  |  2 +-
9119d9
 .../test-fullvirt-serial-tcp-telnet.xml            |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-serial-tcp.xml    |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-serial-udp.xml    |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-serial-unix.xml   |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-sound.xml         |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-usbmouse.xml      |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-usbtablet.xml     |  2 +-
9119d9
 tests/xmconfigdata/test-fullvirt-utc.xml           |  2 +-
9119d9
 tests/xmconfigdata/test-no-source-cdrom.xml        |  2 +-
9119d9
 tests/xmconfigdata/test-pci-devs.xml               |  2 +-
9119d9
 69 files changed, 269 insertions(+), 79 deletions(-)
9119d9
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.xml
9119d9
9119d9
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
9119d9
index 94236dd..757035a 100644
9119d9
--- a/docs/formatdomain.html.in
9119d9
+++ b/docs/formatdomain.html.in
9119d9
@@ -102,7 +102,8 @@
9119d9
   ...
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader readonly='on' type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <nvram>/var/lib/libvirt/nvram/guest_VARS.fd</nvram>
9119d9
     <boot dev='hd'/>
9119d9
     <boot dev='cdrom'/>
9119d9
     <bootmenu enable='yes' timeout='3000'/>
9119d9
@@ -129,7 +130,21 @@
9119d9
         used to assist the domain creation process. It is used by Xen
9119d9
         fully virtualized domains as well as setting the QEMU BIOS file
9119d9
         path for QEMU/KVM domains. Xen since 0.1.0,
9119d9
-        QEMU/KVM since 0.9.12
9119d9
+        QEMU/KVM since 0.9.12 Then, since
9119d9
+        1.2.8 it's possible for the element to have two
9119d9
+        optional attributes: readonly (accepted values are
9119d9
+        yes and no) to reflect the fact that the
9119d9
+        image should be writable or read-only. The second attribute
9119d9
+        type accepts values rom and
9119d9
+        pflash. It tells the hypervisor where in the guest
9119d9
+        memory the file should be mapped.  For instance, if the loader
9119d9
+        path points to an UEFI image, type should be
9119d9
+        pflash.
9119d9
+      
nvram
9119d9
+      
Some UEFI firmwares may want to use a non-volatile memory to store
9119d9
+        some variables. In the host, this is represented as a file and the
9119d9
+        path to the file is stored in this element. Since
9119d9
+        1.2.8
9119d9
       
boot
9119d9
       
The dev attribute takes one of the values "fd", "hd",
9119d9
         "cdrom" or "network" and is used to specify the next boot device
9119d9
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
9119d9
index cedceae..5d9c21c 100644
9119d9
--- a/docs/schemas/domaincommon.rng
9119d9
+++ b/docs/schemas/domaincommon.rng
9119d9
@@ -242,6 +242,27 @@
9119d9
       <interleave>
9119d9
         <optional>
9119d9
           <element name="loader">
9119d9
+            <optional>
9119d9
+              <attribute name="readonly">
9119d9
+                <choice>
9119d9
+                  <value>yes</value>
9119d9
+                  <value>no</value>
9119d9
+                </choice>
9119d9
+              </attribute>
9119d9
+            </optional>
9119d9
+            <optional>
9119d9
+              <attribute name="type">
9119d9
+                <choice>
9119d9
+                  <value>rom</value>
9119d9
+                  <value>pflash</value>
9119d9
+                </choice>
9119d9
+              </attribute>
9119d9
+            </optional>
9119d9
+            <ref name="absFilePath"/>
9119d9
+          </element>
9119d9
+        </optional>
9119d9
+        <optional>
9119d9
+          <element name="nvram">
9119d9
             <ref name="absFilePath"/>
9119d9
           </element>
9119d9
         </optional>
9119d9
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
9119d9
index 53ef694..6ee5c17 100644
9119d9
--- a/src/conf/domain_conf.c
9119d9
+++ b/src/conf/domain_conf.c
9119d9
@@ -777,6 +777,11 @@ VIR_ENUM_IMPL(virDomainDiskMirrorState, VIR_DOMAIN_DISK_MIRROR_STATE_LAST,
9119d9
               "abort",
9119d9
               "pivot")
9119d9
 
9119d9
+VIR_ENUM_IMPL(virDomainLoader,
9119d9
+              VIR_DOMAIN_LOADER_TYPE_LAST,
9119d9
+              "rom",
9119d9
+              "pflash")
9119d9
+
9119d9
 /* Internal mapping: subset of block job types that can be present in
9119d9
  * <mirror> XML (remaining types are not two-phase). */
9119d9
 VIR_ENUM_DECL(virDomainBlockJob)
9119d9
@@ -2010,6 +2015,17 @@ virDomainPanicDefFree(virDomainPanicDefPtr panic)
9119d9
     VIR_FREE(panic);
9119d9
 }
9119d9
 
9119d9
+void
9119d9
+virDomainLoaderDefFree(virDomainLoaderDefPtr loader)
9119d9
+{
9119d9
+    if (!loader)
9119d9
+        return;
9119d9
+
9119d9
+    VIR_FREE(loader->path);
9119d9
+    VIR_FREE(loader->nvram);
9119d9
+    VIR_FREE(loader);
9119d9
+}
9119d9
+
9119d9
 void virDomainDefFree(virDomainDefPtr def)
9119d9
 {
9119d9
     size_t i;
9119d9
@@ -2115,7 +2131,7 @@ void virDomainDefFree(virDomainDefPtr def)
9119d9
     VIR_FREE(def->os.cmdline);
9119d9
     VIR_FREE(def->os.dtb);
9119d9
     VIR_FREE(def->os.root);
9119d9
-    VIR_FREE(def->os.loader);
9119d9
+    virDomainLoaderDefFree(def->os.loader);
9119d9
     VIR_FREE(def->os.bootloader);
9119d9
     VIR_FREE(def->os.bootloaderArgs);
9119d9
 
9119d9
@@ -11661,6 +11677,42 @@ virDomainDefMaybeAddHostdevSCSIcontroller(virDomainDefPtr def)
9119d9
     return 0;
9119d9
 }
9119d9
 
9119d9
+static int
9119d9
+virDomainLoaderDefParseXML(xmlNodePtr node,
9119d9
+                           virDomainLoaderDefPtr loader)
9119d9
+{
9119d9
+    int ret = -1;
9119d9
+    char *readonly_str = NULL;
9119d9
+    char *type_str = NULL;
9119d9
+
9119d9
+    readonly_str = virXMLPropString(node, "readonly");
9119d9
+    type_str = virXMLPropString(node, "type");
9119d9
+    loader->path = (char *) xmlNodeGetContent(node);
9119d9
+
9119d9
+    if (readonly_str &&
9119d9
+        (loader->readonly = virTristateBoolTypeFromString(readonly_str)) <= 0) {
9119d9
+        virReportError(VIR_ERR_XML_DETAIL,
9119d9
+                       _("unknown readonly value: %s"), readonly_str);
9119d9
+        goto cleanup;
9119d9
+    }
9119d9
+
9119d9
+    if (type_str) {
9119d9
+        int type;
9119d9
+        if ((type = virDomainLoaderTypeFromString(type_str)) < 0) {
9119d9
+            virReportError(VIR_ERR_XML_DETAIL,
9119d9
+                           _("unknown type value: %s"), type_str);
9119d9
+            goto cleanup;
9119d9
+        }
9119d9
+        loader->type = type;
9119d9
+    }
9119d9
+
9119d9
+    ret = 0;
9119d9
+ cleanup:
9119d9
+    VIR_FREE(readonly_str);
9119d9
+    VIR_FREE(type_str);
9119d9
+    return ret;
9119d9
+}
9119d9
+
9119d9
 static virDomainDefPtr
9119d9
 virDomainDefParseXML(xmlDocPtr xml,
9119d9
                      xmlNodePtr root,
9119d9
@@ -12701,12 +12753,22 @@ virDomainDefParseXML(xmlDocPtr xml,
9119d9
     if (STREQ(def->os.type, "xen") ||
9119d9
         STREQ(def->os.type, "hvm") ||
9119d9
         STREQ(def->os.type, "uml")) {
9119d9
+        xmlNodePtr loader_node;
9119d9
+
9119d9
         def->os.kernel = virXPathString("string(./os/kernel[1])", ctxt);
9119d9
         def->os.initrd = virXPathString("string(./os/initrd[1])", ctxt);
9119d9
         def->os.cmdline = virXPathString("string(./os/cmdline[1])", ctxt);
9119d9
         def->os.dtb = virXPathString("string(./os/dtb[1])", ctxt);
9119d9
         def->os.root = virXPathString("string(./os/root[1])", ctxt);
9119d9
-        def->os.loader = virXPathString("string(./os/loader[1])", ctxt);
9119d9
+        if ((loader_node = virXPathNode("./os/loader[1]", ctxt))) {
9119d9
+            if (VIR_ALLOC(def->os.loader) < 0)
9119d9
+                goto error;
9119d9
+
9119d9
+            if (virDomainLoaderDefParseXML(loader_node, def->os.loader) < 0)
9119d9
+                goto error;
9119d9
+
9119d9
+            def->os.loader->nvram = virXPathString("string(./os/nvram[1])", ctxt);
9119d9
+        }
9119d9
     }
9119d9
 
9119d9
     if (STREQ(def->os.type, "hvm")) {
9119d9
@@ -17789,6 +17851,23 @@ virDomainHugepagesFormat(virBufferPtr buf,
9119d9
     virBufferAddLit(buf, "</hugepages>\n");
9119d9
 }
9119d9
 
9119d9
+static void
9119d9
+virDomainLoaderDefFormat(virBufferPtr buf,
9119d9
+                         virDomainLoaderDefPtr loader)
9119d9
+{
9119d9
+    const char *readonly = virTristateBoolTypeToString(loader->readonly);
9119d9
+    const char *type = virDomainLoaderTypeToString(loader->type);
9119d9
+
9119d9
+    virBufferAddLit(buf, "
9119d9
+
9119d9
+    if (loader->readonly)
9119d9
+        virBufferAsprintf(buf, " readonly='%s'", readonly);
9119d9
+
9119d9
+    virBufferAsprintf(buf, " type='%s'>", type);
9119d9
+
9119d9
+    virBufferEscapeString(buf, "%s</loader>\n", loader->path);
9119d9
+    virBufferEscapeString(buf, "<nvram>%s</nvram>\n", loader->nvram);
9119d9
+}
9119d9
 
9119d9
 static bool
9119d9
 virDomainDefHasCapabilitiesFeatures(virDomainDefPtr def)
9119d9
@@ -18109,8 +18188,8 @@ virDomainDefFormatInternal(virDomainDefPtr def,
9119d9
     for (i = 0; def->os.initargv && def->os.initargv[i]; i++)
9119d9
         virBufferEscapeString(buf, "<initarg>%s</initarg>\n",
9119d9
                               def->os.initargv[i]);
9119d9
-    virBufferEscapeString(buf, "<loader>%s</loader>\n",
9119d9
-                          def->os.loader);
9119d9
+    if (def->os.loader)
9119d9
+        virDomainLoaderDefFormat(buf, def->os.loader);
9119d9
     virBufferEscapeString(buf, "<kernel>%s</kernel>\n",
9119d9
                           def->os.kernel);
9119d9
     virBufferEscapeString(buf, "<initrd>%s</initrd>\n",
9119d9
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
9119d9
index 9586c3b..c97a10c 100644
9119d9
--- a/src/conf/domain_conf.h
9119d9
+++ b/src/conf/domain_conf.h
9119d9
@@ -1628,6 +1628,26 @@ struct _virDomainBIOSDef {
9119d9
     int rt_delay;
9119d9
 };
9119d9
 
9119d9
+typedef enum {
9119d9
+    VIR_DOMAIN_LOADER_TYPE_ROM = 0,
9119d9
+    VIR_DOMAIN_LOADER_TYPE_PFLASH,
9119d9
+
9119d9
+    VIR_DOMAIN_LOADER_TYPE_LAST
9119d9
+} virDomainLoader;
9119d9
+
9119d9
+VIR_ENUM_DECL(virDomainLoader)
9119d9
+
9119d9
+typedef struct _virDomainLoaderDef virDomainLoaderDef;
9119d9
+typedef virDomainLoaderDef *virDomainLoaderDefPtr;
9119d9
+struct _virDomainLoaderDef {
9119d9
+    char *path;
9119d9
+    int readonly;   /* enum virTristateBool */
9119d9
+    virDomainLoader type;
9119d9
+    char *nvram;    /* path to non-volatile RAM */
9119d9
+};
9119d9
+
9119d9
+void virDomainLoaderDefFree(virDomainLoaderDefPtr loader);
9119d9
+
9119d9
 /* Operating system configuration data & machine / arch */
9119d9
 typedef struct _virDomainOSDef virDomainOSDef;
9119d9
 typedef virDomainOSDef *virDomainOSDefPtr;
9119d9
@@ -1647,7 +1667,7 @@ struct _virDomainOSDef {
9119d9
     char *cmdline;
9119d9
     char *dtb;
9119d9
     char *root;
9119d9
-    char *loader;
9119d9
+    virDomainLoaderDefPtr loader;
9119d9
     char *bootloader;
9119d9
     char *bootloaderArgs;
9119d9
     int smbios_mode;
9119d9
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
9119d9
index 71fc063..b4b13f9 100644
9119d9
--- a/src/libvirt_private.syms
9119d9
+++ b/src/libvirt_private.syms
9119d9
@@ -313,6 +313,9 @@ virDomainLifecycleTypeFromString;
9119d9
 virDomainLifecycleTypeToString;
9119d9
 virDomainListFree;
9119d9
 virDomainLiveConfigHelperMethod;
9119d9
+virDomainLoaderDefFree;
9119d9
+virDomainLoaderTypeFromString;
9119d9
+virDomainLoaderTypeToString;
9119d9
 virDomainLockFailureTypeFromString;
9119d9
 virDomainLockFailureTypeToString;
9119d9
 virDomainMemballoonModelTypeFromString;
9119d9
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
9119d9
index 2184caa..3cb2e0b 100644
9119d9
--- a/src/qemu/qemu_command.c
9119d9
+++ b/src/qemu/qemu_command.c
9119d9
@@ -7527,7 +7527,7 @@ qemuBuildCommandLine(virConnectPtr conn,
9119d9
 
9119d9
     if (def->os.loader) {
9119d9
         virCommandAddArg(cmd, "-bios");
9119d9
-        virCommandAddArg(cmd, def->os.loader);
9119d9
+        virCommandAddArg(cmd, def->os.loader->path);
9119d9
     }
9119d9
 
9119d9
     /* Set '-m MB' based on maxmem, because the lower 'memory' limit
9119d9
@@ -11347,7 +11347,8 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
9119d9
                 goto error;
9119d9
         } else if (STREQ(arg, "-bios")) {
9119d9
             WANT_VALUE();
9119d9
-            if (VIR_STRDUP(def->os.loader, val) < 0)
9119d9
+            if (VIR_ALLOC(def->os.loader) < 0 ||
9119d9
+                VIR_STRDUP(def->os.loader->path, val) < 0)
9119d9
                 goto error;
9119d9
         } else if (STREQ(arg, "-initrd")) {
9119d9
             WANT_VALUE();
9119d9
diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c
9119d9
index a0b104c..311ce3b 100644
9119d9
--- a/src/security/virt-aa-helper.c
9119d9
+++ b/src/security/virt-aa-helper.c
9119d9
@@ -1006,8 +1006,8 @@ get_files(vahControl * ctl)
9119d9
         if (vah_add_file(&buf, ctl->def->os.dtb, "r") != 0)
9119d9
             goto cleanup;
9119d9
 
9119d9
-    if (ctl->def->os.loader && ctl->def->os.loader)
9119d9
-        if (vah_add_file(&buf, ctl->def->os.loader, "r") != 0)
9119d9
+    if (ctl->def->os.loader && ctl->def->os.loader->path)
9119d9
+        if (vah_add_file(&buf, ctl->def->os.loader->path, "r") != 0)
9119d9
             goto cleanup;
9119d9
 
9119d9
     for (i = 0; i < ctl->def->ngraphics; i++) {
9119d9
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
9119d9
index b186ea8..6f56c59 100644
9119d9
--- a/src/vbox/vbox_common.c
9119d9
+++ b/src/vbox/vbox_common.c
9119d9
@@ -988,7 +988,12 @@ vboxSetBootDeviceOrder(virDomainDefPtr def, vboxGlobalData *data,
9119d9
     VIR_DEBUG("def->os.initrd           %s", def->os.initrd);
9119d9
     VIR_DEBUG("def->os.cmdline          %s", def->os.cmdline);
9119d9
     VIR_DEBUG("def->os.root             %s", def->os.root);
9119d9
-    VIR_DEBUG("def->os.loader           %s", def->os.loader);
9119d9
+    if (def->os.loader) {
9119d9
+        VIR_DEBUG("def->os.loader->path     %s", def->os.loader->path);
9119d9
+        VIR_DEBUG("def->os.loader->readonly %d", def->os.loader->readonly);
9119d9
+        VIR_DEBUG("def->os.loader->type     %d", def->os.loader->type);
9119d9
+        VIR_DEBUG("def->os.loader->nvram    %s", def->os.loader->nvram);
9119d9
+    }
9119d9
     VIR_DEBUG("def->os.bootloader       %s", def->os.bootloader);
9119d9
     VIR_DEBUG("def->os.bootloaderArgs   %s", def->os.bootloaderArgs);
9119d9
 
9119d9
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
9119d9
index 50331c9..a6eaccc 100644
9119d9
--- a/src/xenapi/xenapi_driver.c
9119d9
+++ b/src/xenapi/xenapi_driver.c
9119d9
@@ -1427,7 +1427,8 @@ xenapiDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
9119d9
             VIR_FREE(boot_policy);
9119d9
             goto error;
9119d9
         }
9119d9
-        if (VIR_STRDUP(defPtr->os.loader, "pygrub") < 0) {
9119d9
+        if (VIR_ALLOC(defPtr->os.loader) < 0 ||
9119d9
+            VIR_STRDUP(defPtr->os.loader->path, "pygrub") < 0) {
9119d9
             VIR_FREE(boot_policy);
9119d9
             goto error;
9119d9
         }
9119d9
diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c
9119d9
index 9beaf6c..abd77b5 100644
9119d9
--- a/src/xenconfig/xen_common.c
9119d9
+++ b/src/xenconfig/xen_common.c
9119d9
@@ -1065,7 +1065,8 @@ xenParseOS(virConfPtr conf, virDomainDefPtr def)
9119d9
     if (STREQ(def->os.type, "hvm")) {
9119d9
         const char *boot;
9119d9
 
9119d9
-       if (xenConfigCopyString(conf, "kernel", &def->os.loader) < 0)
9119d9
+        if (VIR_ALLOC(def->os.loader) < 0 ||
9119d9
+            xenConfigCopyString(conf, "kernel", &def->os.loader->path) < 0)
9119d9
             return -1;
9119d9
 
9119d9
         if (xenConfigGetString(conf, "boot", &boot, "c") < 0)
9119d9
@@ -1740,8 +1741,8 @@ xenFormatOS(virConfPtr conf, virDomainDefPtr def)
9119d9
         if (xenXMConfigSetString(conf, "builder", "hvm") < 0)
9119d9
             return -1;
9119d9
 
9119d9
-        if (def->os.loader &&
9119d9
-            xenXMConfigSetString(conf, "kernel", def->os.loader) < 0)
9119d9
+        if (def->os.loader && def->os.loader->path &&
9119d9
+            xenXMConfigSetString(conf, "kernel", def->os.loader->path) < 0)
9119d9
             return -1;
9119d9
 
9119d9
         for (i = 0; i < def->os.nBootDevs; i++) {
9119d9
diff --git a/src/xenconfig/xen_sxpr.c b/src/xenconfig/xen_sxpr.c
9119d9
index ff81c36..e8b9f59 100644
9119d9
--- a/src/xenconfig/xen_sxpr.c
9119d9
+++ b/src/xenconfig/xen_sxpr.c
9119d9
@@ -93,13 +93,15 @@ xenParseSxprOS(const struct sexpr *node,
9119d9
                int hvm)
9119d9
 {
9119d9
     if (hvm) {
9119d9
-        if (sexpr_node_copy(node, "domain/image/hvm/loader", &def->os.loader) < 0)
9119d9
+        if (VIR_ALLOC(def->os.loader) < 0)
9119d9
             goto error;
9119d9
-        if (def->os.loader == NULL) {
9119d9
-            if (sexpr_node_copy(node, "domain/image/hvm/kernel", &def->os.loader) < 0)
9119d9
+        if (sexpr_node_copy(node, "domain/image/hvm/loader", &def->os.loader->path) < 0)
9119d9
+            goto error;
9119d9
+        if (def->os.loader->path == NULL) {
9119d9
+            if (sexpr_node_copy(node, "domain/image/hvm/kernel", &def->os.loader->path) < 0)
9119d9
                 goto error;
9119d9
 
9119d9
-            if (def->os.loader == NULL) {
9119d9
+            if (def->os.loader->path == NULL) {
9119d9
                 virReportError(VIR_ERR_INTERNAL_ERROR,
9119d9
                                "%s", _("domain information incomplete, missing HVM loader"));
9119d9
                 return -1;
9119d9
@@ -128,7 +130,7 @@ xenParseSxprOS(const struct sexpr *node,
9119d9
     /* If HVM kenrel == loader, then old xend, so kill off kernel */
9119d9
     if (hvm &&
9119d9
         def->os.kernel &&
9119d9
-        STREQ(def->os.kernel, def->os.loader)) {
9119d9
+        STREQ(def->os.kernel, def->os.loader->path)) {
9119d9
         VIR_FREE(def->os.kernel);
9119d9
     }
9119d9
     /* Drop kernel argument that has no value */
9119d9
@@ -2279,9 +2281,9 @@ xenFormatSxpr(virConnectPtr conn,
9119d9
         if (hvm) {
9119d9
             char bootorder[VIR_DOMAIN_BOOT_LAST+1];
9119d9
             if (def->os.kernel)
9119d9
-                virBufferEscapeSexpr(&buf, "(loader '%s')", def->os.loader);
9119d9
+                virBufferEscapeSexpr(&buf, "(loader '%s')", def->os.loader->path);
9119d9
             else
9119d9
-                virBufferEscapeSexpr(&buf, "(kernel '%s')", def->os.loader);
9119d9
+                virBufferEscapeSexpr(&buf, "(kernel '%s')", def->os.loader->path);
9119d9
 
9119d9
             virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
9119d9
             if (def->vcpus < def->maxvcpus)
9119d9
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.xml b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.xml
9119d9
new file mode 100644
9119d9
index 0000000..d8270b1
9119d9
--- /dev/null
9119d9
+++ b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram.xml
9119d9
@@ -0,0 +1,40 @@
9119d9
+<domain type='qemu'>
9119d9
+  <name>test-bios</name>
9119d9
+  <uuid>362d1fc1-df7d-193e-5c18-49a71bd1da66</uuid>
9119d9
+  <memory unit='KiB'>1048576</memory>
9119d9
+  <currentMemory unit='KiB'>1048576</currentMemory>
9119d9
+  <vcpu placement='static'>1</vcpu>
9119d9
+  <os>
9119d9
+    <type arch='x86_64' machine='pc'>hvm</type>
9119d9
+    <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
9119d9
+    <nvram>/usr/share/OVMF/OVMF_VARS.fd</nvram>
9119d9
+    <boot dev='hd'/>
9119d9
+    <bootmenu enable='yes'/>
9119d9
+  </os>
9119d9
+  <features>
9119d9
+    <acpi/>
9119d9
+  </features>
9119d9
+  <clock offset='utc'/>
9119d9
+  <on_poweroff>destroy</on_poweroff>
9119d9
+  <on_reboot>restart</on_reboot>
9119d9
+  <on_crash>restart</on_crash>
9119d9
+  <devices>
9119d9
+    <emulator>/usr/bin/qemu</emulator>
9119d9
+    <disk type='block' device='disk'>
9119d9
+      <source dev='/dev/HostVG/QEMUGuest1'/>
9119d9
+      <target dev='hda' bus='ide'/>
9119d9
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
9119d9
+    </disk>
9119d9
+    <controller type='usb' index='0'/>
9119d9
+    <controller type='ide' index='0'/>
9119d9
+    <controller type='pci' index='0' model='pci-root'/>
9119d9
+    <serial type='pty'>
9119d9
+      <target port='0'/>
9119d9
+    </serial>
9119d9
+    <console type='pty'>
9119d9
+      <target type='serial' port='0'/>
9119d9
+    </console>
9119d9
+    <input type='tablet' bus='usb'/>
9119d9
+    <memballoon model='virtio'/>
9119d9
+  </devices>
9119d9
+</domain>
9119d9
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pci-bridge-many-disks.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pci-bridge-many-disks.xml
9119d9
index d469b8b..d49f5f4 100644
9119d9
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pci-bridge-many-disks.xml
9119d9
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pci-bridge-many-disks.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='x86_64' machine='pc-i440fx-1.4'>hvm</type>
9119d9
-    <loader>/usr/share/seabios/bios.bin</loader>
9119d9
+    <loader type='rom'>/usr/share/seabios/bios.bin</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
9119d9
index b4ab671..1835fe6 100644
9119d9
--- a/tests/qemuxml2xmltest.c
9119d9
+++ b/tests/qemuxml2xmltest.c
9119d9
@@ -395,6 +395,8 @@ mymain(void)
9119d9
     DO_TEST_DIFFERENT("numatune-memnode");
9119d9
     DO_TEST("numatune-memnode-no-memory");
9119d9
 
9119d9
+    DO_TEST("bios-nvram");
9119d9
+
9119d9
     virObjectUnref(driver.caps);
9119d9
     virObjectUnref(driver.xmlopt);
9119d9
 
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-autoport.xml b/tests/sexpr2xmldata/sexpr2xml-fv-autoport.xml
9119d9
index 69fe9ef..761952c 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-autoport.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-autoport.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-empty-kernel.xml b/tests/sexpr2xmldata/sexpr2xml-fv-empty-kernel.xml
9119d9
index 3c3147d..2898098 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-empty-kernel.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-empty-kernel.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-force-hpet.xml b/tests/sexpr2xmldata/sexpr2xml-fv-force-hpet.xml
9119d9
index 716f16b..a0fe30d 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-force-hpet.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-force-hpet.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-force-nohpet.xml b/tests/sexpr2xmldata/sexpr2xml-fv-force-nohpet.xml
9119d9
index 3dd648b..851797d 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-force-nohpet.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-force-nohpet.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml b/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
9119d9
index 29c1335..09cfe19 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>2</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
9119d9
     <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
9119d9
     <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  </cmdline>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-legacy-vfb.xml b/tests/sexpr2xmldata/sexpr2xml-fv-legacy-vfb.xml
9119d9
index 9c59644..44c0f61 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-legacy-vfb.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-legacy-vfb.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml b/tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml
9119d9
index 67b0b95..29007f0 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-net-ioemu.xml b/tests/sexpr2xmldata/sexpr2xml-fv-net-ioemu.xml
9119d9
index 86b32e9..3dbc999 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-net-ioemu.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-net-ioemu.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-net-netfront.xml b/tests/sexpr2xmldata/sexpr2xml-fv-net-netfront.xml
9119d9
index ed7da80..d96350e 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-net-netfront.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-net-netfront.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml b/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml
9119d9
index ed3fde6..7ad377c 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-dev-2-ports.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-dev-2-ports.xml
9119d9
index 7f5a729..adba6cb 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-dev-2-ports.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-dev-2-ports.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-dev-2nd-port.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-dev-2nd-port.xml
9119d9
index 10f84dc..b6c3601 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-dev-2nd-port.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-dev-2nd-port.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml
9119d9
index a3fd231..dabe679 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml
9119d9
index b3f77c9..fb19d74 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml
9119d9
index e217161..5aa425b 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml
9119d9
index 3ad2264..3c2ca21 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml
9119d9
index 001df56..160edbd 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml
9119d9
index c2496fd..4396efc 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml
9119d9
index 6dc047e..3d17b58 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml
9119d9
index 7ccaeac..fc3d457 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml b/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml
9119d9
index b5ad413..14b54f1 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-sound-all.xml b/tests/sexpr2xmldata/sexpr2xml-fv-sound-all.xml
9119d9
index 7183e79..912df56 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-sound-all.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-sound-all.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-sound.xml b/tests/sexpr2xmldata/sexpr2xml-fv-sound.xml
9119d9
index 7183e79..912df56 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-sound.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-sound.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml b/tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml
9119d9
index ae90e33..19eac3b 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml b/tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml
9119d9
index f81c47a..40ac8a9 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-utc.xml b/tests/sexpr2xmldata/sexpr2xml-fv-utc.xml
9119d9
index c783d93..97f2beb 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-utc.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-utc.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-v2.xml b/tests/sexpr2xmldata/sexpr2xml-fv-v2.xml
9119d9
index bd3b107..493d1b5 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv-v2.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv-v2.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-fv.xml b/tests/sexpr2xmldata/sexpr2xml-fv.xml
9119d9
index c783d93..97f2beb 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-fv.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-fv.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml b/tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml
9119d9
index 00d18ce..a3cd7be 100644
9119d9
--- a/tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml
9119d9
+++ b/tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-escape-paths.xml b/tests/xmconfigdata/test-escape-paths.xml
9119d9
index de3a7e2..623eaa1 100644
9119d9
--- a/tests/xmconfigdata/test-escape-paths.xml
9119d9
+++ b/tests/xmconfigdata/test-escape-paths.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader&test</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader&test</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-force-hpet.xml b/tests/xmconfigdata/test-fullvirt-force-hpet.xml
9119d9
index 75f8724..57a6531 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-force-hpet.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-force-hpet.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-force-nohpet.xml b/tests/xmconfigdata/test-fullvirt-force-nohpet.xml
9119d9
index e5741b6..f6ebcf6 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-force-nohpet.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-force-nohpet.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-localtime.xml b/tests/xmconfigdata/test-fullvirt-localtime.xml
9119d9
index 8b97e5b..36ab389 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-localtime.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-localtime.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-net-ioemu.xml b/tests/xmconfigdata/test-fullvirt-net-ioemu.xml
9119d9
index f22c085..3618bae 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-net-ioemu.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-net-ioemu.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-net-netfront.xml b/tests/xmconfigdata/test-fullvirt-net-netfront.xml
9119d9
index 177bb6a..6a2a439 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-net-netfront.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-net-netfront.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-new-cdrom.xml b/tests/xmconfigdata/test-fullvirt-new-cdrom.xml
9119d9
index f22c085..3618bae 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-new-cdrom.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-new-cdrom.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-old-cdrom.xml b/tests/xmconfigdata/test-fullvirt-old-cdrom.xml
9119d9
index a592630..7d6014d 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-old-cdrom.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-old-cdrom.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-parallel-tcp.xml b/tests/xmconfigdata/test-fullvirt-parallel-tcp.xml
9119d9
index 738e5ab..9b1fd26 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-parallel-tcp.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-parallel-tcp.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-dev-2-ports.xml b/tests/xmconfigdata/test-fullvirt-serial-dev-2-ports.xml
9119d9
index 753831a..a64d40b 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-dev-2-ports.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-dev-2-ports.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-dev-2nd-port.xml b/tests/xmconfigdata/test-fullvirt-serial-dev-2nd-port.xml
9119d9
index 1a55080..ce2cddb 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-dev-2nd-port.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-dev-2nd-port.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-file.xml b/tests/xmconfigdata/test-fullvirt-serial-file.xml
9119d9
index 0d2ac79..36883de 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-file.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-file.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-null.xml b/tests/xmconfigdata/test-fullvirt-serial-null.xml
9119d9
index d4b4ae9..982f9d6 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-null.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-null.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-pipe.xml b/tests/xmconfigdata/test-fullvirt-serial-pipe.xml
9119d9
index 6596dfc..82a1d9b 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-pipe.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-pipe.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-pty.xml b/tests/xmconfigdata/test-fullvirt-serial-pty.xml
9119d9
index 6c55abb..56ccbea 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-pty.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-pty.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-stdio.xml b/tests/xmconfigdata/test-fullvirt-serial-stdio.xml
9119d9
index 461f143..e2e9330 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-stdio.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-stdio.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.xml b/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.xml
9119d9
index d2fa7bf..d68d77c 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-tcp.xml b/tests/xmconfigdata/test-fullvirt-serial-tcp.xml
9119d9
index 60ab8bd..aa3ed5c 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-tcp.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-tcp.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-udp.xml b/tests/xmconfigdata/test-fullvirt-serial-udp.xml
9119d9
index 6c21cd2..256c722 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-udp.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-udp.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-serial-unix.xml b/tests/xmconfigdata/test-fullvirt-serial-unix.xml
9119d9
index f21534e..235c8d4 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-serial-unix.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-serial-unix.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-sound.xml b/tests/xmconfigdata/test-fullvirt-sound.xml
9119d9
index f09c16d..1429d10 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-sound.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-sound.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-usbmouse.xml b/tests/xmconfigdata/test-fullvirt-usbmouse.xml
9119d9
index 18a7ff0..25857f1 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-usbmouse.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-usbmouse.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-usbtablet.xml b/tests/xmconfigdata/test-fullvirt-usbtablet.xml
9119d9
index 5cbb007..31b1176 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-usbtablet.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-usbtablet.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-fullvirt-utc.xml b/tests/xmconfigdata/test-fullvirt-utc.xml
9119d9
index f22c085..3618bae 100644
9119d9
--- a/tests/xmconfigdata/test-fullvirt-utc.xml
9119d9
+++ b/tests/xmconfigdata/test-fullvirt-utc.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='cdrom'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-no-source-cdrom.xml b/tests/xmconfigdata/test-no-source-cdrom.xml
9119d9
index 2a457b2..74f1be1 100644
9119d9
--- a/tests/xmconfigdata/test-no-source-cdrom.xml
9119d9
+++ b/tests/xmconfigdata/test-no-source-cdrom.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
diff --git a/tests/xmconfigdata/test-pci-devs.xml b/tests/xmconfigdata/test-pci-devs.xml
9119d9
index f828056..1911734 100644
9119d9
--- a/tests/xmconfigdata/test-pci-devs.xml
9119d9
+++ b/tests/xmconfigdata/test-pci-devs.xml
9119d9
@@ -6,7 +6,7 @@
9119d9
   <vcpu placement='static'>1</vcpu>
9119d9
   <os>
9119d9
     <type arch='i686' machine='xenfv'>hvm</type>
9119d9
-    <loader>/usr/lib/xen/boot/hvmloader</loader>
9119d9
+    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
9119d9
     <boot dev='hd'/>
9119d9
   </os>
9119d9
   <features>
9119d9
-- 
9119d9
2.1.0
9119d9