[libvirt] [PATCH v6 1/1] qemu: Add command line builder and parser for NVRAM.

2013-04-25 Thread Li Zhang
From: Li Zhang zhlci...@linux.vnet.ibm.com

This patch is to add command line builder and parser
for NVRAM device, and add test cases.

Signed-off-by: Li Zhang zhlci...@linux.vnet.ibm.com
---

 v6 - v5:
  * Add test cases data files. 

 src/qemu/qemu_capabilities.c   |  3 +
 src/qemu/qemu_capabilities.h   |  2 +
 src/qemu/qemu_command.c| 88 +-
 tests/qemuargv2xmltest.c   |  2 +
 .../qemuxml2argv-pseries-nvram.args|  5 ++
 .../qemuxml2argv-pseries-nvram.xml | 23 ++
 tests/qemuxml2argvtest.c   |  1 +
 tests/qemuxml2xmltest.c|  2 +
 8 files changed, 123 insertions(+), 3 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-nvram.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-nvram.xml

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index ef291c0..1d54477 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -220,6 +220,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
   machine-usb-opt,
   tpm-passthrough,
   tpm-tis,
+
+  nvram,  /* 140 */
 );
 
 struct _virQEMUCaps {
@@ -1347,6 +1349,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
 { virtio-rng-ccw, QEMU_CAPS_DEVICE_VIRTIO_RNG },
 { rng-random, QEMU_CAPS_OBJECT_RNG_RANDOM },
 { rng-egd, QEMU_CAPS_OBJECT_RNG_EGD },
+{ spapr-nvram, QEMU_CAPS_DEVICE_NVRAM },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 4e76799..85f47c4 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -179,6 +179,8 @@ enum virQEMUCapsFlags {
 QEMU_CAPS_DEVICE_TPM_PASSTHROUGH = 138, /* -tpmdev passthrough */
 QEMU_CAPS_DEVICE_TPM_TIS = 139, /* -device tpm_tis */
 
+QEMU_CAPS_DEVICE_NVRAM   = 140,  /*-global spapr-nvram.reg=*/
+
 QEMU_CAPS_LAST,   /* this must always be the last item */
 };
 
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 009d42d..41b8d78 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -53,6 +53,10 @@
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
+#define VIO_ADDR_NET 0x1000ul
+#define VIO_ADDR_SCSI 0x2000ul
+#define VIO_ADDR_SERIAL 0x3000ul
+#define VIO_ADDR_NVRAM 0x3000ul
 
 VIR_ENUM_DECL(virDomainDiskQEMUBus)
 VIR_ENUM_IMPL(virDomainDiskQEMUBus, VIR_DOMAIN_DISK_BUS_LAST,
@@ -1148,7 +1152,7 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
 STREQ(def-nets[i]-model, spapr-vlan))
 def-nets[i]-info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
 if (qemuAssignSpaprVIOAddress(def, def-nets[i]-info,
-  0x1000ul)  0)
+  VIO_ADDR_NET)  0)
 goto cleanup;
 }
 
@@ -1163,7 +1167,7 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
 def-controllers[i]-type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI)
 def-controllers[i]-info.type = 
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
 if (qemuAssignSpaprVIOAddress(def, def-controllers[i]-info,
-  0x2000ul)  0)
+  VIO_ADDR_SCSI)  0)
 goto cleanup;
 }
 
@@ -1173,7 +1177,16 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr 
def,
 STREQ(def-os.machine, pseries))
 def-serials[i]-info.type = 
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
 if (qemuAssignSpaprVIOAddress(def, def-serials[i]-info,
-  0x3000ul)  0)
+  VIO_ADDR_SERIAL)  0)
+goto cleanup;
+}
+
+if (def-nvram) {
+if (def-os.arch == VIR_ARCH_PPC64 
+STREQ(def-os.machine, pseries))
+def-nvram-info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
+if (qemuAssignSpaprVIOAddress(def, def-nvram-info,
+  VIO_ADDR_NVRAM)  0)
 goto cleanup;
 }
 
@@ -3969,6 +3982,32 @@ error:
 return NULL;
 }
 
+static char *
+qemuBuildNVRAMDevStr(virDomainNVRAMDefPtr dev)
+{
+virBuffer buf = VIR_BUFFER_INITIALIZER;
+
+if (dev-info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO 
+dev-info.addr.spaprvio.has_reg) {
+virBufferAsprintf(buf, spapr-nvram.reg=0x%llx,
+  dev-info.addr.spaprvio.reg);
+} else {
+virReportError(VIR_ERR_XML_ERROR,
+   %s, _(NVRAM address only can be spaprvio 
currently.\n));
+goto error;
+}
+
+if (virBufferError(buf)) {
+virReportOOMError();
+goto error;
+}
+
+return virBufferContentAndReset(buf);
+
+error:
+  

Re: [libvirt] [PATCH v6 1/1] qemu: Add command line builder and parser for NVRAM.

2013-04-25 Thread Osier Yang

On 25/04/13 16:46, Li Zhang wrote:

From: Li Zhangzhlci...@linux.vnet.ibm.com

This patch is to add command line builder and parser
for NVRAM device, and add test cases.

Signed-off-by: Li Zhangzhlci...@linux.vnet.ibm.com
---

  v6 - v5:
   * Add test cases data files.


Pushed with 1/2 together, with the attached diffs squashed in, one would be
glad if you can apply diff yourself in though.

Osier

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH v6 1/1] qemu: Add command line builder and parser for NVRAM.

2013-04-25 Thread Li Zhang

On 2013年04月25日 16:59, Osier Yang wrote:

On 25/04/13 16:46, Li Zhang wrote:

From: Li Zhangzhlci...@linux.vnet.ibm.com

This patch is to add command line builder and parser
for NVRAM device, and add test cases.

Signed-off-by: Li Zhangzhlci...@linux.vnet.ibm.com
---

v6 - v5:
* Add test cases data files.


Pushed with 1/2 together, with the attached diffs squashed in, one 
would be

glad if you can apply diff yourself in though.


Thanks a lot, Osier. :)



Osier


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list