qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options
@ 2010-09-15 12:36 Amit Shah
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 1/4] qdev: Add a description field for qdev properties for documentation Amit Shah
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Amit Shah @ 2010-09-15 12:36 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Amit Shah, qemu list

Hello,

This is a rebase of the patchset I'd sent earlier.

I add the 4/4 patch, documenting common block device properties.
Other than that, the usual notes apply: this is just the start, just
getting the framework in place and a few examples so that people can
then pick up and start documenting their devices and options.  We want
to see all of the devices covered, and hopefully turn on
build_bug_on() on an empty doc string.

Maintainers should perhaps also look for patches that introduce
options without documentation.

That's the long-term goal (over 0.14).  For short-term, I'll be
preparing follow-on patches that add doc strings for a few more
options and perhaps bug people based on git history as to what
documentation is to be added for some options.

If this looks acceptable, please apply!

Amit Shah (4):
  qdev: Add a description field for qdev properties for documentation
  virtio-serial: Add description fields for qdev properties
  net.h: Add description fields for qdev properites
  block_int.h: Provide documentation for common block qdev properties

 block_int.h           |   14 +++++----
 hw/a9mpcore.c         |    2 +-
 hw/acpi_piix4.c       |    2 +-
 hw/apic.c             |    4 +-
 hw/applesmc.c         |    4 +-
 hw/arm11mpcore.c      |    4 +-
 hw/arm_sysctl.c       |    4 +-
 hw/armv7m.c           |    2 +-
 hw/cs4231a.c          |    6 ++--
 hw/debugcon.c         |    6 ++--
 hw/eccmemctl.c        |    2 +-
 hw/escc.c             |   16 +++++-----
 hw/etraxfs_pic.c      |    3 +-
 hw/fdc.c              |   10 +++---
 hw/fw_cfg.c           |    4 +-
 hw/gus.c              |    8 ++--
 hw/hpet.c             |    4 +-
 hw/i2c.c              |    2 +-
 hw/ide/cmd646.c       |    2 +-
 hw/ide/isa.c          |    6 ++--
 hw/ide/qdev.c         |    6 ++--
 hw/integratorcp.c     |    2 +-
 hw/ivshmem.c          |   15 +++++----
 hw/lance.c            |    2 +-
 hw/m48t59.c           |   12 ++++----
 hw/mc146818rtc.c      |    2 +-
 hw/ne2000-isa.c       |    4 +-
 hw/parallel.c         |    8 ++--
 hw/pci.c              |   12 ++++----
 hw/qdev-addr.h        |    4 +-
 hw/qdev.c             |    3 +-
 hw/qdev.h             |   75 ++++++++++++++++++++++++++-----------------------
 hw/s390-virtio-bus.c  |    2 +-
 hw/sb16.c             |   10 +++---
 hw/scsi-bus.c         |    2 +-
 hw/scsi-disk.c        |    4 +-
 hw/serial.c           |    8 ++--
 hw/slavio_timer.c     |    2 +-
 hw/smbus_eeprom.c     |    2 +-
 hw/sparc32_dma.c      |    2 +-
 hw/sun4m.c            |    2 +-
 hw/sun4m_iommu.c      |    2 +-
 hw/sun4u.c            |    2 +-
 hw/syborg_fb.c        |    4 +-
 hw/syborg_interrupt.c |    2 +-
 hw/syborg_keyboard.c  |    2 +-
 hw/syborg_pointer.c   |    4 +-
 hw/syborg_serial.c    |    2 +-
 hw/syborg_timer.c     |    2 +-
 hw/syborg_virtio.c    |    6 ++--
 hw/tcx.c              |   10 +++---
 hw/usb-ohci.c         |    4 +-
 hw/usb-serial.c       |   12 ++++----
 hw/vga-pci.c          |    4 +-
 hw/virtio-blk.h       |    4 +-
 hw/virtio-console.c   |   19 ++++++++----
 hw/virtio-net.h       |   51 +++++++++++++++++++++------------
 hw/virtio-pci.c       |   22 +++++++-------
 hw/virtio-serial.h    |   13 ++++++++
 hw/virtio.h           |    2 +-
 hw/vt82c686.c         |    2 +-
 hw/xilinx_ethlite.c   |    6 ++-
 hw/xilinx_intc.c      |    3 +-
 hw/xilinx_timer.c     |    4 +-
 net.h                 |    9 ++++--
 usb-linux.c           |    8 ++--
 66 files changed, 266 insertions(+), 217 deletions(-)

-- 
1.7.2.2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH 1/4] qdev: Add a description field for qdev properties for documentation
  2010-09-15 12:36 [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Amit Shah
@ 2010-09-15 12:36 ` Amit Shah
  2010-09-28 13:52   ` Markus Armbruster
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 2/4] virtio-serial: Add description fields for qdev properties Amit Shah
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Amit Shah @ 2010-09-15 12:36 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Amit Shah, qemu list

Add a 'description' along with each qdev property to document the input
each qdev property takes.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 block_int.h           |   10 +++---
 hw/a9mpcore.c         |    2 +-
 hw/acpi_piix4.c       |    2 +-
 hw/apic.c             |    4 +-
 hw/applesmc.c         |    4 +-
 hw/arm11mpcore.c      |    4 +-
 hw/arm_sysctl.c       |    4 +-
 hw/armv7m.c           |    2 +-
 hw/cs4231a.c          |    6 ++--
 hw/debugcon.c         |    6 ++--
 hw/eccmemctl.c        |    2 +-
 hw/escc.c             |   16 +++++-----
 hw/etraxfs_pic.c      |    3 +-
 hw/fdc.c              |   10 +++---
 hw/fw_cfg.c           |    4 +-
 hw/gus.c              |    8 ++--
 hw/hpet.c             |    4 +-
 hw/i2c.c              |    2 +-
 hw/ide/cmd646.c       |    2 +-
 hw/ide/isa.c          |    6 ++--
 hw/ide/qdev.c         |    6 ++--
 hw/integratorcp.c     |    2 +-
 hw/ivshmem.c          |   15 +++++----
 hw/lance.c            |    2 +-
 hw/m48t59.c           |   12 ++++----
 hw/mc146818rtc.c      |    2 +-
 hw/ne2000-isa.c       |    4 +-
 hw/parallel.c         |    8 ++--
 hw/pci.c              |   12 ++++----
 hw/qdev-addr.h        |    4 +-
 hw/qdev.c             |    3 +-
 hw/qdev.h             |   75 ++++++++++++++++++++++++++-----------------------
 hw/s390-virtio-bus.c  |    2 +-
 hw/sb16.c             |   10 +++---
 hw/scsi-bus.c         |    2 +-
 hw/scsi-disk.c        |    4 +-
 hw/serial.c           |    8 ++--
 hw/slavio_timer.c     |    2 +-
 hw/smbus_eeprom.c     |    2 +-
 hw/sparc32_dma.c      |    2 +-
 hw/sun4m.c            |    2 +-
 hw/sun4m_iommu.c      |    2 +-
 hw/sun4u.c            |    2 +-
 hw/syborg_fb.c        |    4 +-
 hw/syborg_interrupt.c |    2 +-
 hw/syborg_keyboard.c  |    2 +-
 hw/syborg_pointer.c   |    4 +-
 hw/syborg_serial.c    |    2 +-
 hw/syborg_timer.c     |    2 +-
 hw/syborg_virtio.c    |    6 ++--
 hw/tcx.c              |   10 +++---
 hw/usb-ohci.c         |    4 +-
 hw/usb-serial.c       |   12 ++++----
 hw/vga-pci.c          |    4 +-
 hw/virtio-blk.h       |    4 +-
 hw/virtio-console.c   |   16 ++++++----
 hw/virtio-net.h       |   51 +++++++++++++++++++++------------
 hw/virtio-pci.c       |   22 +++++++-------
 hw/virtio.h           |    2 +-
 hw/vt82c686.c         |    2 +-
 hw/xilinx_ethlite.c   |    6 ++-
 hw/xilinx_intc.c      |    3 +-
 hw/xilinx_timer.c     |    4 +-
 net.h                 |    6 ++--
 usb-linux.c           |    8 ++--
 65 files changed, 244 insertions(+), 216 deletions(-)

diff --git a/block_int.h b/block_int.h
index e8e7156..ce20285 100644
--- a/block_int.h
+++ b/block_int.h
@@ -241,12 +241,12 @@ static inline unsigned int get_physical_block_exp(BlockConf *conf)
 }
 
 #define DEFINE_BLOCK_PROPERTIES(_state, _conf)                          \
-    DEFINE_PROP_DRIVE("drive", _state, _conf.bs),                       \
+    DEFINE_PROP_DRIVE("drive", _state, _conf.bs, ""),                   \
     DEFINE_PROP_UINT16("logical_block_size", _state,                    \
-                       _conf.logical_block_size, 512),                  \
+                       _conf.logical_block_size, 512, ""),              \
     DEFINE_PROP_UINT16("physical_block_size", _state,                   \
-                       _conf.physical_block_size, 512),                 \
-    DEFINE_PROP_UINT16("min_io_size", _state, _conf.min_io_size, 0),  \
-    DEFINE_PROP_UINT32("opt_io_size", _state, _conf.opt_io_size, 0)
+                       _conf.physical_block_size, 512, ""),             \
+    DEFINE_PROP_UINT16("min_io_size", _state, _conf.min_io_size, 0, ""), \
+    DEFINE_PROP_UINT32("opt_io_size", _state, _conf.opt_io_size, 0, "")
 
 #endif /* BLOCK_INT_H */
diff --git a/hw/a9mpcore.c b/hw/a9mpcore.c
index b5e5328..174f5d5 100644
--- a/hw/a9mpcore.c
+++ b/hw/a9mpcore.c
@@ -16,7 +16,7 @@ static SysBusDeviceInfo mpcore_priv_info = {
     .qdev.name  = "a9mpcore_priv",
     .qdev.size  = sizeof(mpcore_priv_state),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("num-cpu", mpcore_priv_state, num_cpu, 1),
+        DEFINE_PROP_UINT32("num-cpu", mpcore_priv_state, num_cpu, 1, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
index bfa1d9a..4963afa 100644
--- a/hw/acpi_piix4.c
+++ b/hw/acpi_piix4.c
@@ -437,7 +437,7 @@ static PCIDeviceInfo piix4_pm_info = {
     .init               = piix4_pm_initfn,
     .config_write       = pm_write_config,
     .qdev.props         = (Property[]) {
-        DEFINE_PROP_UINT32("smb_io_base", PIIX4PMState, smb_io_base, 0),
+        DEFINE_PROP_UINT32("smb_io_base", PIIX4PMState, smb_io_base, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/apic.c b/hw/apic.c
index d686b51..2ef5a03 100644
--- a/hw/apic.c
+++ b/hw/apic.c
@@ -1005,8 +1005,8 @@ static SysBusDeviceInfo apic_info = {
     .qdev.reset = apic_reset,
     .qdev.no_user = 1,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT8("id", APICState, id, -1),
-        DEFINE_PROP_PTR("cpu_env", APICState, cpu_env),
+        DEFINE_PROP_UINT8("id", APICState, id, -1, ""),
+        DEFINE_PROP_PTR("cpu_env", APICState, cpu_env, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/applesmc.c b/hw/applesmc.c
index 29b9330..9803be6 100644
--- a/hw/applesmc.c
+++ b/hw/applesmc.c
@@ -227,8 +227,8 @@ static ISADeviceInfo applesmc_isa_info = {
     .init       = applesmc_isa_init,
     .qdev.props = (Property[]) {
         DEFINE_PROP_HEX32("iobase", struct AppleSMCStatus, iobase,
-                          APPLESMC_DEFAULT_IOBASE),
-        DEFINE_PROP_STRING("osk", struct AppleSMCStatus, osk),
+                          APPLESMC_DEFAULT_IOBASE, ""),
+        DEFINE_PROP_STRING("osk", struct AppleSMCStatus, osk, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/arm11mpcore.c b/hw/arm11mpcore.c
index 3bbd885..a3a7a9d 100644
--- a/hw/arm11mpcore.c
+++ b/hw/arm11mpcore.c
@@ -88,7 +88,7 @@ static SysBusDeviceInfo mpcore_rirq_info = {
     .qdev.name  = "realview_mpcore",
     .qdev.size  = sizeof(mpcore_rirq_state),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("num-cpu", mpcore_rirq_state, num_cpu, 1),
+        DEFINE_PROP_UINT32("num-cpu", mpcore_rirq_state, num_cpu, 1, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
@@ -98,7 +98,7 @@ static SysBusDeviceInfo mpcore_priv_info = {
     .qdev.name  = "arm11mpcore_priv",
     .qdev.size  = sizeof(mpcore_priv_state),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("num-cpu", mpcore_priv_state, num_cpu, 1),
+        DEFINE_PROP_UINT32("num-cpu", mpcore_priv_state, num_cpu, 1, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/arm_sysctl.c b/hw/arm_sysctl.c
index 0cb2ffc..b35d269 100644
--- a/hw/arm_sysctl.c
+++ b/hw/arm_sysctl.c
@@ -232,8 +232,8 @@ static SysBusDeviceInfo arm_sysctl_info = {
     .qdev.size  = sizeof(arm_sysctl_state),
     .qdev.reset = arm_sysctl_reset,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("sys_id", arm_sysctl_state, sys_id, 0),
-        DEFINE_PROP_UINT32("proc_id", arm_sysctl_state, proc_id, 0),
+        DEFINE_PROP_UINT32("sys_id", arm_sysctl_state, sys_id, 0, ""),
+        DEFINE_PROP_UINT32("proc_id", arm_sysctl_state, proc_id, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/armv7m.c b/hw/armv7m.c
index 588ec98..eb2b9ff 100644
--- a/hw/armv7m.c
+++ b/hw/armv7m.c
@@ -250,7 +250,7 @@ static SysBusDeviceInfo bitband_info = {
     .qdev.name  = "ARM,bitband-memory",
     .qdev.size  = sizeof(BitBandState),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("base", BitBandState, base, 0),
+        DEFINE_PROP_UINT32("base", BitBandState, base, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/cs4231a.c b/hw/cs4231a.c
index 4d5ce5c..330dd4a 100644
--- a/hw/cs4231a.c
+++ b/hw/cs4231a.c
@@ -671,9 +671,9 @@ static ISADeviceInfo cs4231a_info = {
     .qdev.vmsd     = &vmstate_cs4231a,
     .init          = cs4231a_initfn,
     .qdev.props    = (Property[]) {
-        DEFINE_PROP_HEX32  ("iobase",  CSState, port, 0x534),
-        DEFINE_PROP_UINT32 ("irq",     CSState, irq,  9),
-        DEFINE_PROP_UINT32 ("dma",     CSState, dma,  3),
+        DEFINE_PROP_HEX32  ("iobase",  CSState, port, 0x534, ""),
+        DEFINE_PROP_UINT32 ("irq",     CSState, irq,  9,     ""),
+        DEFINE_PROP_UINT32 ("dma",     CSState, dma,  3,     ""),
         DEFINE_PROP_END_OF_LIST (),
     },
 };
diff --git a/hw/debugcon.c b/hw/debugcon.c
index 5ee6821..a1e06ee 100644
--- a/hw/debugcon.c
+++ b/hw/debugcon.c
@@ -92,9 +92,9 @@ static ISADeviceInfo debugcon_isa_info = {
     .qdev.size  = sizeof(ISADebugconState),
     .init       = debugcon_isa_initfn,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_HEX32("iobase", ISADebugconState, iobase, 0xe9),
-        DEFINE_PROP_CHR("chardev",  ISADebugconState, state.chr),
-        DEFINE_PROP_HEX32("readback", ISADebugconState, state.readback, 0xe9),
+        DEFINE_PROP_HEX32("iobase", ISADebugconState, iobase, 0xe9, ""),
+        DEFINE_PROP_CHR("chardev",  ISADebugconState, state.chr, ""),
+        DEFINE_PROP_HEX32("readback", ISADebugconState, state.readback, 0xe9, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/eccmemctl.c b/hw/eccmemctl.c
index 498c61a..442a695 100644
--- a/hw/eccmemctl.c
+++ b/hw/eccmemctl.c
@@ -324,7 +324,7 @@ static SysBusDeviceInfo ecc_info = {
     .qdev.vmsd  = &vmstate_ecc,
     .qdev.reset = ecc_reset,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_HEX32("version", ECCState, version, -1),
+        DEFINE_PROP_HEX32("version", ECCState, version, -1, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/escc.c b/hw/escc.c
index 8714239..0960c17 100644
--- a/hw/escc.c
+++ b/hw/escc.c
@@ -936,14 +936,14 @@ static SysBusDeviceInfo escc_info = {
     .qdev.vmsd  = &vmstate_escc,
     .qdev.reset = escc_reset,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("frequency", SerialState, frequency,   0),
-        DEFINE_PROP_UINT32("it_shift",  SerialState, it_shift,    0),
-        DEFINE_PROP_UINT32("disabled",  SerialState, disabled,    0),
-        DEFINE_PROP_UINT32("disabled",  SerialState, disabled,    0),
-        DEFINE_PROP_UINT32("chnBtype",  SerialState, chn[0].type, 0),
-        DEFINE_PROP_UINT32("chnAtype",  SerialState, chn[1].type, 0),
-        DEFINE_PROP_CHR("chrB", SerialState, chn[0].chr),
-        DEFINE_PROP_CHR("chrA", SerialState, chn[1].chr),
+        DEFINE_PROP_UINT32("frequency", SerialState, frequency,   0, ""),
+        DEFINE_PROP_UINT32("it_shift",  SerialState, it_shift,    0, ""),
+        DEFINE_PROP_UINT32("disabled",  SerialState, disabled,    0, ""),
+        DEFINE_PROP_UINT32("disabled",  SerialState, disabled,    0, ""),
+        DEFINE_PROP_UINT32("chnBtype",  SerialState, chn[0].type, 0, ""),
+        DEFINE_PROP_UINT32("chnAtype",  SerialState, chn[1].type, 0, ""),
+        DEFINE_PROP_CHR("chrB", SerialState, chn[0].chr, ""),
+        DEFINE_PROP_CHR("chrA", SerialState, chn[1].chr, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/etraxfs_pic.c b/hw/etraxfs_pic.c
index b2c4859..3cb6638 100644
--- a/hw/etraxfs_pic.c
+++ b/hw/etraxfs_pic.c
@@ -155,7 +155,8 @@ static SysBusDeviceInfo etraxfs_pic_info = {
     .qdev.name  = "etraxfs,pic",
     .qdev.size  = sizeof(struct etrax_pic),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_PTR("interrupt_vector", struct etrax_pic, interrupt_vector),
+        DEFINE_PROP_PTR("interrupt_vector", struct etrax_pic, interrupt_vector,
+                        ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/fdc.c b/hw/fdc.c
index c159dcb..0c977e9 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -2045,8 +2045,8 @@ static ISADeviceInfo isa_fdc_info = {
     .qdev.vmsd  = &vmstate_isa_fdc,
     .qdev.reset = fdctrl_external_reset_isa,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_DRIVE("driveA", FDCtrlISABus, state.drives[0].bs),
-        DEFINE_PROP_DRIVE("driveB", FDCtrlISABus, state.drives[1].bs),
+        DEFINE_PROP_DRIVE("driveA", FDCtrlISABus, state.drives[0].bs, ""),
+        DEFINE_PROP_DRIVE("driveB", FDCtrlISABus, state.drives[1].bs, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
@@ -2068,8 +2068,8 @@ static SysBusDeviceInfo sysbus_fdc_info = {
     .qdev.vmsd  = &vmstate_sysbus_fdc,
     .qdev.reset = fdctrl_external_reset_sysbus,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_DRIVE("driveA", FDCtrlSysBus, state.drives[0].bs),
-        DEFINE_PROP_DRIVE("driveB", FDCtrlSysBus, state.drives[1].bs),
+        DEFINE_PROP_DRIVE("driveA", FDCtrlSysBus, state.drives[0].bs, ""),
+        DEFINE_PROP_DRIVE("driveB", FDCtrlSysBus, state.drives[1].bs, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
@@ -2081,7 +2081,7 @@ static SysBusDeviceInfo sun4m_fdc_info = {
     .qdev.vmsd  = &vmstate_sysbus_fdc,
     .qdev.reset = fdctrl_external_reset_sysbus,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_DRIVE("drive", FDCtrlSysBus, state.drives[0].bs),
+        DEFINE_PROP_DRIVE("drive", FDCtrlSysBus, state.drives[0].bs, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c
index 72866ae..e806215 100644
--- a/hw/fw_cfg.c
+++ b/hw/fw_cfg.c
@@ -385,8 +385,8 @@ static SysBusDeviceInfo fw_cfg_info = {
     .qdev.reset = fw_cfg_reset,
     .qdev.no_user = 1,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_HEX32("ctl_iobase", FWCfgState, ctl_iobase, -1),
-        DEFINE_PROP_HEX32("data_iobase", FWCfgState, data_iobase, -1),
+        DEFINE_PROP_HEX32("ctl_iobase", FWCfgState, ctl_iobase, -1, ""),
+        DEFINE_PROP_HEX32("data_iobase", FWCfgState, data_iobase, -1, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/gus.c b/hw/gus.c
index e9016d8..2c37ff9 100644
--- a/hw/gus.c
+++ b/hw/gus.c
@@ -303,10 +303,10 @@ static ISADeviceInfo gus_info = {
     .qdev.vmsd     = &vmstate_gus,
     .init          = gus_initfn,
     .qdev.props    = (Property[]) {
-        DEFINE_PROP_UINT32 ("freq",    GUSState, freq,        44100),
-        DEFINE_PROP_HEX32  ("iobase",  GUSState, port,        0x240),
-        DEFINE_PROP_UINT32 ("irq",     GUSState, emu.gusirq,  7),
-        DEFINE_PROP_UINT32 ("dma",     GUSState, emu.gusdma,  3),
+        DEFINE_PROP_UINT32 ("freq",    GUSState, freq,        44100, ""),
+        DEFINE_PROP_HEX32  ("iobase",  GUSState, port,        0x240, ""),
+        DEFINE_PROP_UINT32 ("irq",     GUSState, emu.gusirq,  7,     ""),
+        DEFINE_PROP_UINT32 ("dma",     GUSState, emu.gusdma,  3,     ""),
         DEFINE_PROP_END_OF_LIST (),
     },
 };
diff --git a/hw/hpet.c b/hw/hpet.c
index d5c406c..c31f11f 100644
--- a/hw/hpet.c
+++ b/hw/hpet.c
@@ -733,8 +733,8 @@ static SysBusDeviceInfo hpet_device_info = {
     .qdev.reset   = hpet_reset,
     .init         = hpet_init,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT8("timers", HPETState, num_timers, HPET_MIN_TIMERS),
-        DEFINE_PROP_BIT("msi", HPETState, flags, HPET_MSI_SUPPORT, false),
+        DEFINE_PROP_UINT8("timers", HPETState, num_timers, HPET_MIN_TIMERS, ""),
+        DEFINE_PROP_BIT("msi", HPETState, flags, HPET_MSI_SUPPORT, false, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/i2c.c b/hw/i2c.c
index f80d12d..f648732 100644
--- a/hw/i2c.c
+++ b/hw/i2c.c
@@ -21,7 +21,7 @@ static struct BusInfo i2c_bus_info = {
     .name = "I2C",
     .size = sizeof(i2c_bus),
     .props = (Property[]) {
-        DEFINE_PROP_UINT8("address", struct i2c_slave, address, 0),
+        DEFINE_PROP_UINT8("address", struct i2c_slave, address, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c
index ff80dd5..17d5e0b 100644
--- a/hw/ide/cmd646.c
+++ b/hw/ide/cmd646.c
@@ -285,7 +285,7 @@ static PCIDeviceInfo cmd646_ide_info[] = {
         .qdev.size    = sizeof(PCIIDEState),
         .init         = pci_cmd646_ide_initfn,
         .qdev.props   = (Property[]) {
-            DEFINE_PROP_UINT32("secondary", PCIIDEState, secondary, 0),
+            DEFINE_PROP_UINT32("secondary", PCIIDEState, secondary, 0, ""),
             DEFINE_PROP_END_OF_LIST(),
         },
     },{
diff --git a/hw/ide/isa.c b/hw/ide/isa.c
index 6b57e0d..2ab5411 100644
--- a/hw/ide/isa.c
+++ b/hw/ide/isa.c
@@ -102,9 +102,9 @@ static ISADeviceInfo isa_ide_info = {
     .init       = isa_ide_initfn,
     .qdev.reset = isa_ide_reset,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_HEX32("iobase",  ISAIDEState, iobase,  0x1f0),
-        DEFINE_PROP_HEX32("iobase2", ISAIDEState, iobase2, 0x3f6),
-        DEFINE_PROP_UINT32("irq",    ISAIDEState, isairq,  14),
+        DEFINE_PROP_HEX32("iobase",  ISAIDEState, iobase,  0x1f0, ""),
+        DEFINE_PROP_HEX32("iobase2", ISAIDEState, iobase2, 0x3f6, ""),
+        DEFINE_PROP_UINT32("irq",    ISAIDEState, isairq,  14, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index 0808760..dcea68a 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -137,10 +137,10 @@ static IDEDeviceInfo ide_drive_info = {
     .qdev.size  = sizeof(IDEDrive),
     .init       = ide_drive_initfn,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("unit", IDEDrive, dev.unit, -1),
+        DEFINE_PROP_UINT32("unit", IDEDrive, dev.unit, -1, ""),
         DEFINE_BLOCK_PROPERTIES(IDEDrive, dev.conf),
-        DEFINE_PROP_STRING("ver",  IDEDrive, dev.version),
-        DEFINE_PROP_STRING("serial",  IDEDrive, dev.serial),
+        DEFINE_PROP_STRING("ver",  IDEDrive, dev.version, ""),
+        DEFINE_PROP_STRING("serial",  IDEDrive, dev.serial, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/integratorcp.c b/hw/integratorcp.c
index 3bf216b..d21aaea 100644
--- a/hw/integratorcp.c
+++ b/hw/integratorcp.c
@@ -528,7 +528,7 @@ static SysBusDeviceInfo core_info = {
     .qdev.name  = "integrator_core",
     .qdev.size  = sizeof(integratorcm_state),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("memsz", integratorcm_state, memsz, 0),
+        DEFINE_PROP_UINT32("memsz", integratorcm_state, memsz, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/ivshmem.c b/hw/ivshmem.c
index 06dce70..f0febee 100644
--- a/hw/ivshmem.c
+++ b/hw/ivshmem.c
@@ -810,13 +810,14 @@ static PCIDeviceInfo ivshmem_info = {
     .init       = pci_ivshmem_init,
     .exit       = pci_ivshmem_uninit,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_CHR("chardev", IVShmemState, server_chr),
-        DEFINE_PROP_STRING("size", IVShmemState, sizearg),
-        DEFINE_PROP_UINT32("vectors", IVShmemState, vectors, 1),
-        DEFINE_PROP_BIT("ioeventfd", IVShmemState, features, IVSHMEM_IOEVENTFD, false),
-        DEFINE_PROP_BIT("msi", IVShmemState, features, IVSHMEM_MSI, true),
-        DEFINE_PROP_STRING("shm", IVShmemState, shmobj),
-        DEFINE_PROP_STRING("role", IVShmemState, role),
+        DEFINE_PROP_CHR("chardev", IVShmemState, server_chr, ""),
+        DEFINE_PROP_STRING("size", IVShmemState, sizearg, ""),
+        DEFINE_PROP_UINT32("vectors", IVShmemState, vectors, 1, ""),
+        DEFINE_PROP_BIT("ioeventfd", IVShmemState, features, IVSHMEM_IOEVENTFD,
+                        false, ""),
+        DEFINE_PROP_BIT("msi", IVShmemState, features, IVSHMEM_MSI, true, ""),
+        DEFINE_PROP_STRING("shm", IVShmemState, shmobj, ""),
+        DEFINE_PROP_STRING("role", IVShmemState, role, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/lance.c b/hw/lance.c
index b6b04dd..c64bf36 100644
--- a/hw/lance.c
+++ b/hw/lance.c
@@ -151,7 +151,7 @@ static SysBusDeviceInfo lance_info = {
     .qdev.reset = lance_reset,
     .qdev.vmsd  = &vmstate_lance,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_PTR("dma", SysBusPCNetState, state.dma_opaque),
+        DEFINE_PROP_PTR("dma", SysBusPCNetState, state.dma_opaque, ""),
         DEFINE_NIC_PROPERTIES(SysBusPCNetState, state.conf),
         DEFINE_PROP_END_OF_LIST(),
     }
diff --git a/hw/m48t59.c b/hw/m48t59.c
index c7492a6..edbb384 100644
--- a/hw/m48t59.c
+++ b/hw/m48t59.c
@@ -730,9 +730,9 @@ static ISADeviceInfo m48t59_isa_info = {
     .qdev.reset = m48t59_reset_isa,
     .qdev.no_user = 1,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("size",    M48t59ISAState, state.size,    -1),
-        DEFINE_PROP_UINT32("type",    M48t59ISAState, state.type,    -1),
-        DEFINE_PROP_HEX32( "io_base", M48t59ISAState, state.io_base,  0),
+        DEFINE_PROP_UINT32("size",    M48t59ISAState, state.size,    -1, ""),
+        DEFINE_PROP_UINT32("type",    M48t59ISAState, state.type,    -1, ""),
+        DEFINE_PROP_HEX32( "io_base", M48t59ISAState, state.io_base,  0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
@@ -743,9 +743,9 @@ static SysBusDeviceInfo m48t59_info = {
     .qdev.size = sizeof(M48t59SysBusState),
     .qdev.reset = m48t59_reset_sysbus,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("size",    M48t59SysBusState, state.size,    -1),
-        DEFINE_PROP_UINT32("type",    M48t59SysBusState, state.type,    -1),
-        DEFINE_PROP_HEX32( "io_base", M48t59SysBusState, state.io_base,  0),
+        DEFINE_PROP_UINT32("size",    M48t59SysBusState, state.size,    -1, ""),
+        DEFINE_PROP_UINT32("type",    M48t59SysBusState, state.type,    -1, ""),
+        DEFINE_PROP_HEX32( "io_base", M48t59SysBusState, state.io_base,  0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c
index 2b91fa8..6930ab8 100644
--- a/hw/mc146818rtc.c
+++ b/hw/mc146818rtc.c
@@ -635,7 +635,7 @@ static ISADeviceInfo mc146818rtc_info = {
     .qdev.vmsd     = &vmstate_rtc,
     .init          = rtc_initfn,
     .qdev.props    = (Property[]) {
-        DEFINE_PROP_INT32("base_year", RTCState, base_year, 1980),
+        DEFINE_PROP_INT32("base_year", RTCState, base_year, 1980, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/ne2000-isa.c b/hw/ne2000-isa.c
index 03a5a1f..ec7daa3 100644
--- a/hw/ne2000-isa.c
+++ b/hw/ne2000-isa.c
@@ -107,8 +107,8 @@ static ISADeviceInfo ne2000_isa_info = {
     .qdev.size  = sizeof(ISANE2000State),
     .init       = isa_ne2000_initfn,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_HEX32("iobase", ISANE2000State, iobase, 0x300),
-        DEFINE_PROP_UINT32("irq",   ISANE2000State, isairq, 9),
+        DEFINE_PROP_HEX32("iobase", ISANE2000State, iobase, 0x300, ""),
+        DEFINE_PROP_UINT32("irq",   ISANE2000State, isairq, 9, ""),
         DEFINE_NIC_PROPERTIES(ISANE2000State, ne2000.c),
         DEFINE_PROP_END_OF_LIST(),
     },
diff --git a/hw/parallel.c b/hw/parallel.c
index 6b11672..fcf9ee2 100644
--- a/hw/parallel.c
+++ b/hw/parallel.c
@@ -587,10 +587,10 @@ static ISADeviceInfo parallel_isa_info = {
     .qdev.size  = sizeof(ISAParallelState),
     .init       = parallel_isa_initfn,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("index", ISAParallelState, index,   -1),
-        DEFINE_PROP_HEX32("iobase", ISAParallelState, iobase,  -1),
-        DEFINE_PROP_UINT32("irq",   ISAParallelState, isairq,  7),
-        DEFINE_PROP_CHR("chardev",  ISAParallelState, state.chr),
+        DEFINE_PROP_UINT32("index", ISAParallelState, index,   -1, ""),
+        DEFINE_PROP_HEX32("iobase", ISAParallelState, iobase,  -1, ""),
+        DEFINE_PROP_UINT32("irq",   ISAParallelState, isairq,  7, ""),
+        DEFINE_PROP_CHR("chardev",  ISAParallelState, state.chr, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/pci.c b/hw/pci.c
index a98d6f3..02a7d09 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -66,11 +66,11 @@ static struct BusInfo pci_bus_info = {
     .print_dev  = pcibus_dev_print,
     .get_dev_path = pcibus_get_dev_path,
     .props      = (Property[]) {
-        DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1),
-        DEFINE_PROP_STRING("romfile", PCIDevice, romfile),
-        DEFINE_PROP_UINT32("rombar",  PCIDevice, rom_bar, 1),
+        DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1, ""),
+        DEFINE_PROP_STRING("romfile", PCIDevice, romfile, ""),
+        DEFINE_PROP_UINT32("rombar",  PCIDevice, rom_bar, 1, ""),
         DEFINE_PROP_BIT("multifunction", PCIDevice, cap_present,
-                        QEMU_PCI_CAP_MULTIFUNCTION_BITNR, false),
+                        QEMU_PCI_CAP_MULTIFUNCTION_BITNR, false, ""),
         DEFINE_PROP_END_OF_LIST()
     }
 };
@@ -1978,8 +1978,8 @@ static PCIDeviceInfo bridge_info = {
     .config_write = pci_bridge_write_config,
     .is_bridge    = 1,
     .qdev.props   = (Property[]) {
-        DEFINE_PROP_HEX32("vendorid", PCIBridge, vid, 0),
-        DEFINE_PROP_HEX32("deviceid", PCIBridge, did, 0),
+        DEFINE_PROP_HEX32("vendorid", PCIBridge, vid, 0, ""),
+        DEFINE_PROP_HEX32("deviceid", PCIBridge, did, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/qdev-addr.h b/hw/qdev-addr.h
index a0ddf38..515a887 100644
--- a/hw/qdev-addr.h
+++ b/hw/qdev-addr.h
@@ -1,5 +1,5 @@
-#define DEFINE_PROP_TADDR(_n, _s, _f, _d)                               \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_taddr, target_phys_addr_t)
+#define DEFINE_PROP_TADDR(_n, _s, _f, _d, _c)				\
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_taddr, target_phys_addr_t, _c)
 
 extern PropertyInfo qdev_prop_taddr;
 void qdev_prop_set_taddr(DeviceState *dev, const char *name, target_phys_addr_t value);
diff --git a/hw/qdev.c b/hw/qdev.c
index 35858cb..b415025 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -188,7 +188,8 @@ int qdev_device_help(QemuOpts *opts)
         if (!prop->info->parse) {
             continue;           /* no way to set it, don't show */
         }
-        error_printf("%s.%s=%s\n", info->name, prop->name, prop->info->name);
+        error_printf("%s.%s=%s, %s\n", info->name, prop->name,
+                     prop->info->name, prop->desc ?: "");
     }
     return 1;
 }
diff --git a/hw/qdev.h b/hw/qdev.h
index 579328a..63def0b 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -71,6 +71,7 @@ struct BusState {
 struct Property {
     const char   *name;
     PropertyInfo *info;
+    const char   *desc;
     int          offset;
     int          bitnr;
     void         *defval;
@@ -206,59 +207,63 @@ extern PropertyInfo qdev_prop_netdev;
 extern PropertyInfo qdev_prop_vlan;
 extern PropertyInfo qdev_prop_pci_devfn;
 
-#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
+#define DEFINE_PROP(_name, _state, _field, _prop, _type, _desc) {       \
         .name      = (_name),                                    \
         .info      = &(_prop),                                   \
+        .desc      = (_desc),                                    \
         .offset    = offsetof(_state, _field)                    \
             + type_check(_type,typeof_field(_state, _field)),    \
         }
-#define DEFINE_PROP_DEFAULT(_name, _state, _field, _defval, _prop, _type) { \
+#define DEFINE_PROP_DEFAULT(_name, _state, _field, _defval, _prop, _type, \
+                            _desc) {                                    \
         .name      = (_name),                                           \
         .info      = &(_prop),                                          \
+        .desc      = (_desc),                                           \
         .offset    = offsetof(_state, _field)                           \
             + type_check(_type,typeof_field(_state, _field)),           \
         .defval    = (_type[]) { _defval },                             \
         }
-#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) {  \
+#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval, _desc) {  \
         .name      = (_name),                                    \
         .info      = &(qdev_prop_bit),                           \
-        .bitnr    = (_bit),                                      \
+        .desc      = (_desc),                                    \
+        .bitnr     = (_bit),                                     \
         .offset    = offsetof(_state, _field)                    \
             + type_check(uint32_t,typeof_field(_state, _field)), \
         .defval    = (bool[]) { (_defval) },                     \
         }
 
-#define DEFINE_PROP_UINT8(_n, _s, _f, _d)                       \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t)
-#define DEFINE_PROP_UINT16(_n, _s, _f, _d)                      \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint16, uint16_t)
-#define DEFINE_PROP_UINT32(_n, _s, _f, _d)                      \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint32, uint32_t)
-#define DEFINE_PROP_INT32(_n, _s, _f, _d)                      \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_int32, int32_t)
-#define DEFINE_PROP_UINT64(_n, _s, _f, _d)                      \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t)
-#define DEFINE_PROP_HEX32(_n, _s, _f, _d)                       \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex32, uint32_t)
-#define DEFINE_PROP_HEX64(_n, _s, _f, _d)                       \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex64, uint64_t)
-#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d)                   \
-    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, uint32_t)
-
-#define DEFINE_PROP_PTR(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*)
-#define DEFINE_PROP_CHR(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*)
-#define DEFINE_PROP_STRING(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
-#define DEFINE_PROP_NETDEV(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, VLANClientState*)
-#define DEFINE_PROP_VLAN(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, VLANState*)
-#define DEFINE_PROP_DRIVE(_n, _s, _f) \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *)
-#define DEFINE_PROP_MACADDR(_n, _s, _f)         \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
+#define DEFINE_PROP_UINT8(_n, _s, _f, _d, _c)                           \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t, _c)
+#define DEFINE_PROP_UINT16(_n, _s, _f, _d, _c)                          \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint16, uint16_t, _c)
+#define DEFINE_PROP_UINT32(_n, _s, _f, _d, _c)                          \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint32, uint32_t, _c)
+#define DEFINE_PROP_INT32(_n, _s, _f, _d, _c)                           \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_int32, int32_t, _c)
+#define DEFINE_PROP_UINT64(_n, _s, _f, _d, _c)                          \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t, _c)
+#define DEFINE_PROP_HEX32(_n, _s, _f, _d, _c)                           \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex32, uint32_t, _c)
+#define DEFINE_PROP_HEX64(_n, _s, _f, _d, _c)                           \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex64, uint64_t, _c)
+#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d, _c)                       \
+    DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, uint32_t, _c)
+
+#define DEFINE_PROP_PTR(_n, _s, _f, _c)                 \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*, _c)
+#define DEFINE_PROP_CHR(_n, _s, _f, _c)                 \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*, _c)
+#define DEFINE_PROP_STRING(_n, _s, _f, _c)              \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*, _c)
+#define DEFINE_PROP_NETDEV(_n, _s, _f, _c)              \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, VLANClientState*, _c)
+#define DEFINE_PROP_VLAN(_n, _s, _f, _c)                \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, VLANState*, _c)
+#define DEFINE_PROP_DRIVE(_n, _s, _f, _c)               \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *, _c)
+#define DEFINE_PROP_MACADDR(_n, _s, _f, _c)             \
+    DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr, _c)
 
 #define DEFINE_PROP_END_OF_LIST()               \
     {}
diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
index 784dc01..ba0f377 100644
--- a/hw/s390-virtio-bus.c
+++ b/hw/s390-virtio-bus.c
@@ -354,7 +354,7 @@ static VirtIOS390DeviceInfo s390_virtio_serial = {
     .qdev.size = sizeof(VirtIOS390Device),
     .qdev.props = (Property[]) {
         DEFINE_PROP_UINT32("max_ports", VirtIOS390Device, max_virtserial_ports,
-                           31),
+                           31, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/sb16.c b/hw/sb16.c
index 78590a7..f2181a2 100644
--- a/hw/sb16.c
+++ b/hw/sb16.c
@@ -1400,11 +1400,11 @@ static ISADeviceInfo sb16_info = {
     .qdev.vmsd     = &vmstate_sb16,
     .init          = sb16_initfn,
     .qdev.props    = (Property[]) {
-        DEFINE_PROP_HEX32  ("version", SB16State, ver,  0x0405), /* 4.5 */
-        DEFINE_PROP_HEX32  ("iobase",  SB16State, port, 0x220),
-        DEFINE_PROP_UINT32 ("irq",     SB16State, irq,  5),
-        DEFINE_PROP_UINT32 ("dma",     SB16State, dma,  1),
-        DEFINE_PROP_UINT32 ("dma16",   SB16State, hdma, 5),
+        DEFINE_PROP_HEX32  ("version", SB16State, ver,  0x0405, ""), /* 4.5 */
+        DEFINE_PROP_HEX32  ("iobase",  SB16State, port, 0x220, ""),
+        DEFINE_PROP_UINT32 ("irq",     SB16State, irq,  5, ""),
+        DEFINE_PROP_UINT32 ("dma",     SB16State, dma,  1, ""),
+        DEFINE_PROP_UINT32 ("dma16",   SB16State, hdma, 5, ""),
         DEFINE_PROP_END_OF_LIST (),
     },
 };
diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c
index 7aa0bcd..b501816 100644
--- a/hw/scsi-bus.c
+++ b/hw/scsi-bus.c
@@ -9,7 +9,7 @@ static struct BusInfo scsi_bus_info = {
     .name  = "SCSI",
     .size  = sizeof(SCSIBus),
     .props = (Property[]) {
-        DEFINE_PROP_UINT32("scsi-id", SCSIDevice, id, -1),
+        DEFINE_PROP_UINT32("scsi-id", SCSIDevice, id, -1, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 1446ca6..e910bf6 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1198,8 +1198,8 @@ static SCSIDeviceInfo scsi_disk_info = {
     .get_buf      = scsi_get_buf,
     .qdev.props   = (Property[]) {
         DEFINE_BLOCK_PROPERTIES(SCSIDiskState, qdev.conf),
-        DEFINE_PROP_STRING("ver",  SCSIDiskState, version),
-        DEFINE_PROP_STRING("serial",  SCSIDiskState, serial),
+        DEFINE_PROP_STRING("ver",  SCSIDiskState, version, ""),
+        DEFINE_PROP_STRING("serial",  SCSIDiskState, serial, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/serial.c b/hw/serial.c
index f09ce0a..5dc6bcd 100644
--- a/hw/serial.c
+++ b/hw/serial.c
@@ -971,10 +971,10 @@ static ISADeviceInfo serial_isa_info = {
     .qdev.vmsd  = &vmstate_isa_serial,
     .init       = serial_isa_initfn,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("index", ISASerialState, index,   -1),
-        DEFINE_PROP_HEX32("iobase", ISASerialState, iobase,  -1),
-        DEFINE_PROP_UINT32("irq",   ISASerialState, isairq,  -1),
-        DEFINE_PROP_CHR("chardev",  ISASerialState, state.chr),
+        DEFINE_PROP_UINT32("index", ISASerialState, index,   -1, ""),
+        DEFINE_PROP_HEX32("iobase", ISASerialState, iobase,  -1, ""),
+        DEFINE_PROP_UINT32("irq",   ISASerialState, isairq,  -1, ""),
+        DEFINE_PROP_CHR("chardev",  ISASerialState, state.chr, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/slavio_timer.c b/hw/slavio_timer.c
index c125de4..39a81b8 100644
--- a/hw/slavio_timer.c
+++ b/hw/slavio_timer.c
@@ -425,7 +425,7 @@ static SysBusDeviceInfo slavio_timer_info = {
     .qdev.vmsd  = &vmstate_slavio_timer,
     .qdev.reset = slavio_timer_reset,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("num_cpus",  SLAVIO_TIMERState, num_cpus,  0),
+        DEFINE_PROP_UINT32("num_cpus",  SLAVIO_TIMERState, num_cpus,  0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/smbus_eeprom.c b/hw/smbus_eeprom.c
index 52463e0..9ee8f54 100644
--- a/hw/smbus_eeprom.c
+++ b/hw/smbus_eeprom.c
@@ -108,7 +108,7 @@ static SMBusDeviceInfo smbus_eeprom_info = {
     .i2c.qdev.name = "smbus-eeprom",
     .i2c.qdev.size = sizeof(SMBusEEPROMDevice),
     .i2c.qdev.props = (Property[]) {
-        DEFINE_PROP_PTR("data", SMBusEEPROMDevice, data),
+        DEFINE_PROP_PTR("data", SMBusEEPROMDevice, data, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
     .init = smbus_eeprom_init,
diff --git a/hw/sparc32_dma.c b/hw/sparc32_dma.c
index 984ffc3..1de135f 100644
--- a/hw/sparc32_dma.c
+++ b/hw/sparc32_dma.c
@@ -289,7 +289,7 @@ static SysBusDeviceInfo sparc32_dma_info = {
     .qdev.vmsd  = &vmstate_dma,
     .qdev.reset = dma_reset,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_PTR("iommu_opaque", DMAState, iommu),
+        DEFINE_PROP_PTR("iommu_opaque", DMAState, iommu, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/sun4m.c b/hw/sun4m.c
index 0392109..a24eb2f 100644
--- a/hw/sun4m.c
+++ b/hw/sun4m.c
@@ -766,7 +766,7 @@ static SysBusDeviceInfo ram_info = {
     .qdev.name  = "memory",
     .qdev.size  = sizeof(RamDevice),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT64("size", RamDevice, size, 0),
+        DEFINE_PROP_UINT64("size", RamDevice, size, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/sun4m_iommu.c b/hw/sun4m_iommu.c
index 1dbe077..fa146b8 100644
--- a/hw/sun4m_iommu.c
+++ b/hw/sun4m_iommu.c
@@ -379,7 +379,7 @@ static SysBusDeviceInfo iommu_info = {
     .qdev.vmsd  = &vmstate_iommu,
     .qdev.reset = iommu_reset,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_HEX32("version", IOMMUState, version, 0),
+        DEFINE_PROP_HEX32("version", IOMMUState, version, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/sun4u.c b/hw/sun4u.c
index 45a46d6..d3bb3df 100644
--- a/hw/sun4u.c
+++ b/hw/sun4u.c
@@ -692,7 +692,7 @@ static SysBusDeviceInfo ram_info = {
     .qdev.name  = "memory",
     .qdev.size  = sizeof(RamDevice),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT64("size", RamDevice, size, 0),
+        DEFINE_PROP_UINT64("size", RamDevice, size, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/syborg_fb.c b/hw/syborg_fb.c
index ed57203..a938c0f 100644
--- a/hw/syborg_fb.c
+++ b/hw/syborg_fb.c
@@ -536,8 +536,8 @@ static SysBusDeviceInfo syborg_fb_info = {
     .qdev.name  = "syborg,framebuffer",
     .qdev.size  = sizeof(SyborgFBState),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("width",  SyborgFBState, cols, 0),
-        DEFINE_PROP_UINT32("height", SyborgFBState, rows, 0),
+        DEFINE_PROP_UINT32("width",  SyborgFBState, cols, 0, ""),
+        DEFINE_PROP_UINT32("height", SyborgFBState, rows, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/syborg_interrupt.c b/hw/syborg_interrupt.c
index 30140fb..3693f5c 100644
--- a/hw/syborg_interrupt.c
+++ b/hw/syborg_interrupt.c
@@ -224,7 +224,7 @@ static SysBusDeviceInfo syborg_int_info = {
     .qdev.name  = "syborg,interrupt",
     .qdev.size  = sizeof(SyborgIntState),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("num-interrupts", SyborgIntState, num_irqs, 64),
+        DEFINE_PROP_UINT32("num-interrupts", SyborgIntState, num_irqs, 64, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/syborg_keyboard.c b/hw/syborg_keyboard.c
index 7709100..3a93d3a 100644
--- a/hw/syborg_keyboard.c
+++ b/hw/syborg_keyboard.c
@@ -230,7 +230,7 @@ static SysBusDeviceInfo syborg_keyboard_info = {
     .qdev.name  = "syborg,keyboard",
     .qdev.size  = sizeof(SyborgKeyboardState),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("fifo-size", SyborgKeyboardState, fifo_size, 16),
+        DEFINE_PROP_UINT32("fifo-size", SyborgKeyboardState, fifo_size, 16, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/syborg_pointer.c b/hw/syborg_pointer.c
index 69b8d96..d59a0e0 100644
--- a/hw/syborg_pointer.c
+++ b/hw/syborg_pointer.c
@@ -228,8 +228,8 @@ static SysBusDeviceInfo syborg_pointer_info = {
     .qdev.name  = "syborg,pointer",
     .qdev.size  = sizeof(SyborgPointerState),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("fifo-size", SyborgPointerState, fifo_size, 16),
-        DEFINE_PROP_UINT32("absolute",  SyborgPointerState, absolute,   1),
+        DEFINE_PROP_UINT32("fifo-size", SyborgPointerState, fifo_size, 16, ""),
+        DEFINE_PROP_UINT32("absolute",  SyborgPointerState, absolute,   1, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/syborg_serial.c b/hw/syborg_serial.c
index 8c42956..9f550b3 100644
--- a/hw/syborg_serial.c
+++ b/hw/syborg_serial.c
@@ -345,7 +345,7 @@ static SysBusDeviceInfo syborg_serial_info = {
     .qdev.name  = "syborg,serial",
     .qdev.size  = sizeof(SyborgSerialState),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("fifo-size", SyborgSerialState, fifo_size, 16),
+        DEFINE_PROP_UINT32("fifo-size", SyborgSerialState, fifo_size, 16, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/syborg_timer.c b/hw/syborg_timer.c
index 95e07d7..7245b18 100644
--- a/hw/syborg_timer.c
+++ b/hw/syborg_timer.c
@@ -231,7 +231,7 @@ static SysBusDeviceInfo syborg_timer_info = {
     .qdev.name  = "syborg,timer",
     .qdev.size  = sizeof(SyborgTimerState),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("frequency",SyborgTimerState, freq, 0),
+        DEFINE_PROP_UINT32("frequency",SyborgTimerState, freq, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/syborg_virtio.c b/hw/syborg_virtio.c
index 4dfd1a8..e81955b 100644
--- a/hw/syborg_virtio.c
+++ b/hw/syborg_virtio.c
@@ -297,10 +297,10 @@ static SysBusDeviceInfo syborg_virtio_net_info = {
         DEFINE_NIC_PROPERTIES(SyborgVirtIOProxy, nic),
         DEFINE_VIRTIO_NET_FEATURES(SyborgVirtIOProxy, host_features),
         DEFINE_PROP_UINT32("x-txtimer", SyborgVirtIOProxy,
-                           net.txtimer, TX_TIMER_INTERVAL),
+                           net.txtimer, TX_TIMER_INTERVAL, ""),
         DEFINE_PROP_INT32("x-txburst", SyborgVirtIOProxy,
-                          net.txburst, TX_BURST),
-        DEFINE_PROP_STRING("tx", SyborgVirtIOProxy, net.tx),
+                          net.txburst, TX_BURST, ""),
+        DEFINE_PROP_STRING("tx", SyborgVirtIOProxy, net.tx, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/tcx.c b/hw/tcx.c
index 6ee65bb..b5ff0fd 100644
--- a/hw/tcx.c
+++ b/hw/tcx.c
@@ -633,11 +633,11 @@ static SysBusDeviceInfo tcx_info = {
     .qdev.reset = tcx_reset,
     .qdev.vmsd  = &vmstate_tcx,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_TADDR("addr",      TCXState, addr,      -1),
-        DEFINE_PROP_HEX32("vram_size", TCXState, vram_size, -1),
-        DEFINE_PROP_UINT16("width",    TCXState, width,     -1),
-        DEFINE_PROP_UINT16("height",   TCXState, height,    -1),
-        DEFINE_PROP_UINT16("depth",    TCXState, depth,     -1),
+        DEFINE_PROP_TADDR("addr",      TCXState, addr,      -1, ""),
+        DEFINE_PROP_HEX32("vram_size", TCXState, vram_size, -1, ""),
+        DEFINE_PROP_UINT16("width",    TCXState, width,     -1, ""),
+        DEFINE_PROP_UINT16("height",   TCXState, height,    -1, ""),
+        DEFINE_PROP_UINT16("depth",    TCXState, depth,     -1, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index c60fd8d..8c0e373 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -1782,8 +1782,8 @@ static SysBusDeviceInfo ohci_sysbus_info = {
     .qdev.desc    = "OHCI USB Controller",
     .qdev.size    = sizeof(OHCISysBusState),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("num-ports", OHCISysBusState, num_ports, 3),
-        DEFINE_PROP_TADDR("dma-offset", OHCISysBusState, dma_offset, 3),
+        DEFINE_PROP_UINT32("num-ports", OHCISysBusState, num_ports, 3, ""),
+        DEFINE_PROP_TADDR("dma-offset", OHCISysBusState, dma_offset, 3, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/usb-serial.c b/hw/usb-serial.c
index c19580f..f0fb340 100644
--- a/hw/usb-serial.c
+++ b/hw/usb-serial.c
@@ -642,9 +642,9 @@ static struct USBDeviceInfo serial_info = {
     .usbdevice_name = "serial",
     .usbdevice_init = usb_serial_init,
     .qdev.props     = (Property[]) {
-        DEFINE_PROP_CHR("chardev",     USBSerialState, cs),
-        DEFINE_PROP_HEX32("vendorid",  USBSerialState, vendorid,  0x0403),
-        DEFINE_PROP_HEX32("productid", USBSerialState, productid, 0x6001),
+        DEFINE_PROP_CHR("chardev",     USBSerialState, cs, ""),
+        DEFINE_PROP_HEX32("vendorid",  USBSerialState, vendorid,  0x0403, ""),
+        DEFINE_PROP_HEX32("productid", USBSerialState, productid, 0x6001, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
@@ -662,9 +662,9 @@ static struct USBDeviceInfo braille_info = {
     .usbdevice_name = "braille",
     .usbdevice_init = usb_braille_init,
     .qdev.props     = (Property[]) {
-        DEFINE_PROP_CHR("chardev",     USBSerialState, cs),
-        DEFINE_PROP_HEX32("vendorid",  USBSerialState, vendorid,  0x0403),
-        DEFINE_PROP_HEX32("productid", USBSerialState, productid, 0xfe72),
+        DEFINE_PROP_CHR("chardev",     USBSerialState, cs, ""),
+        DEFINE_PROP_HEX32("vendorid",  USBSerialState, vendorid,  0x0403, ""),
+        DEFINE_PROP_HEX32("productid", USBSerialState, productid, 0xfe72, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/vga-pci.c b/hw/vga-pci.c
index 2315f70..3f7a46c 100644
--- a/hw/vga-pci.c
+++ b/hw/vga-pci.c
@@ -131,8 +131,8 @@ static PCIDeviceInfo vga_info = {
     .init         = pci_vga_initfn,
     .config_write = pci_vga_write_config,
     .qdev.props   = (Property[]) {
-        DEFINE_PROP_HEX32("bios-offset", PCIVGAState, vga.bios_offset, 0),
-        DEFINE_PROP_HEX32("bios-size",   PCIVGAState, vga.bios_size,   0),
+        DEFINE_PROP_HEX32("bios-offset", PCIVGAState, vga.bios_offset, 0, ""),
+        DEFINE_PROP_HEX32("bios-size",   PCIVGAState, vga.bios_size,   0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/virtio-blk.h b/hw/virtio-blk.h
index fff46da..d587c5b 100644
--- a/hw/virtio-blk.h
+++ b/hw/virtio-blk.h
@@ -97,8 +97,8 @@ struct virtio_scsi_inhdr
 
 #ifdef __linux__
 #define DEFINE_VIRTIO_BLK_FEATURES(_state, _field) \
-        DEFINE_VIRTIO_COMMON_FEATURES(_state, _field), \
-        DEFINE_PROP_BIT("scsi", _state, _field, VIRTIO_BLK_F_SCSI, true)
+        DEFINE_VIRTIO_COMMON_FEATURES(_state, _field),                      \
+        DEFINE_PROP_BIT("scsi", _state, _field, VIRTIO_BLK_F_SCSI, true, "")
 #else
 #define DEFINE_VIRTIO_BLK_FEATURES(_state, _field) \
         DEFINE_VIRTIO_COMMON_FEATURES(_state, _field)
diff --git a/hw/virtio-console.c b/hw/virtio-console.c
index caea11f..ccd277a 100644
--- a/hw/virtio-console.c
+++ b/hw/virtio-console.c
@@ -95,10 +95,11 @@ static VirtIOSerialPortInfo virtconsole_info = {
     .init          = virtconsole_initfn,
     .exit          = virtconsole_exitfn,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT8("is_console", VirtConsole, port.is_console, 1),
-        DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID),
-        DEFINE_PROP_CHR("chardev", VirtConsole, chr),
-        DEFINE_PROP_STRING("name", VirtConsole, port.name),
+        DEFINE_PROP_UINT8("is_console", VirtConsole, port.is_console, 1, ""),
+        DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID,
+                           ""),
+        DEFINE_PROP_CHR("chardev", VirtConsole, chr, ""),
+        DEFINE_PROP_STRING("name", VirtConsole, port.name, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
@@ -131,9 +132,10 @@ static VirtIOSerialPortInfo virtserialport_info = {
     .init          = virtserialport_initfn,
     .exit          = virtconsole_exitfn,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID),
-        DEFINE_PROP_CHR("chardev", VirtConsole, chr),
-        DEFINE_PROP_STRING("name", VirtConsole, port.name),
+        DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID,
+                           ""),
+        DEFINE_PROP_CHR("chardev", VirtConsole, chr, ""),
+        DEFINE_PROP_STRING("name", VirtConsole, port.name, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/virtio-net.h b/hw/virtio-net.h
index 8af9a1c..8fde1a3 100644
--- a/hw/virtio-net.h
+++ b/hw/virtio-net.h
@@ -168,22 +168,37 @@ struct virtio_net_ctrl_mac {
  #define VIRTIO_NET_CTRL_VLAN_DEL             1
 
 #define DEFINE_VIRTIO_NET_FEATURES(_state, _field) \
-        DEFINE_VIRTIO_COMMON_FEATURES(_state, _field), \
-        DEFINE_PROP_BIT("csum", _state, _field, VIRTIO_NET_F_CSUM, true), \
-        DEFINE_PROP_BIT("guest_csum", _state, _field, VIRTIO_NET_F_GUEST_CSUM, true), \
-        DEFINE_PROP_BIT("gso", _state, _field, VIRTIO_NET_F_GSO, true), \
-        DEFINE_PROP_BIT("guest_tso4", _state, _field, VIRTIO_NET_F_GUEST_TSO4, true), \
-        DEFINE_PROP_BIT("guest_tso6", _state, _field, VIRTIO_NET_F_GUEST_TSO6, true), \
-        DEFINE_PROP_BIT("guest_ecn", _state, _field, VIRTIO_NET_F_GUEST_ECN, true), \
-        DEFINE_PROP_BIT("guest_ufo", _state, _field, VIRTIO_NET_F_GUEST_UFO, true), \
-        DEFINE_PROP_BIT("host_tso4", _state, _field, VIRTIO_NET_F_HOST_TSO4, true), \
-        DEFINE_PROP_BIT("host_tso6", _state, _field, VIRTIO_NET_F_HOST_TSO6, true), \
-        DEFINE_PROP_BIT("host_ecn", _state, _field, VIRTIO_NET_F_HOST_ECN, true), \
-        DEFINE_PROP_BIT("host_ufo", _state, _field, VIRTIO_NET_F_HOST_UFO, true), \
-        DEFINE_PROP_BIT("mrg_rxbuf", _state, _field, VIRTIO_NET_F_MRG_RXBUF, true), \
-        DEFINE_PROP_BIT("status", _state, _field, VIRTIO_NET_F_STATUS, true), \
-        DEFINE_PROP_BIT("ctrl_vq", _state, _field, VIRTIO_NET_F_CTRL_VQ, true), \
-        DEFINE_PROP_BIT("ctrl_rx", _state, _field, VIRTIO_NET_F_CTRL_RX, true), \
-        DEFINE_PROP_BIT("ctrl_vlan", _state, _field, VIRTIO_NET_F_CTRL_VLAN, true), \
-        DEFINE_PROP_BIT("ctrl_rx_extra", _state, _field, VIRTIO_NET_F_CTRL_RX_EXTRA, true)
+        DEFINE_VIRTIO_COMMON_FEATURES(_state, _field),                        \
+        DEFINE_PROP_BIT("csum", _state, _field, VIRTIO_NET_F_CSUM, true, ""), \
+        DEFINE_PROP_BIT("guest_csum", _state, _field, VIRTIO_NET_F_GUEST_CSUM, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("gso", _state, _field, VIRTIO_NET_F_GSO, true, ""), \
+        DEFINE_PROP_BIT("guest_tso4", _state, _field, VIRTIO_NET_F_GUEST_TSO4, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("guest_tso6", _state, _field, VIRTIO_NET_F_GUEST_TSO6, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("guest_ecn", _state, _field, VIRTIO_NET_F_GUEST_ECN, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("guest_ufo", _state, _field, VIRTIO_NET_F_GUEST_UFO, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("host_tso4", _state, _field, VIRTIO_NET_F_HOST_TSO4, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("host_tso6", _state, _field, VIRTIO_NET_F_HOST_TSO6, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("host_ecn", _state, _field, VIRTIO_NET_F_HOST_ECN, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("host_ufo", _state, _field, VIRTIO_NET_F_HOST_UFO, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("mrg_rxbuf", _state, _field, VIRTIO_NET_F_MRG_RXBUF, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("status", _state, _field, VIRTIO_NET_F_STATUS, true, \
+                        ""),                                            \
+        DEFINE_PROP_BIT("ctrl_vq", _state, _field, VIRTIO_NET_F_CTRL_VQ, true, \
+                        ""),                                            \
+        DEFINE_PROP_BIT("ctrl_rx", _state, _field, VIRTIO_NET_F_CTRL_RX, true, \
+                        ""),                                            \
+        DEFINE_PROP_BIT("ctrl_vlan", _state, _field, VIRTIO_NET_F_CTRL_VLAN, \
+                        true, ""),                                      \
+        DEFINE_PROP_BIT("ctrl_rx_extra", _state, _field,                \
+                        VIRTIO_NET_F_CTRL_RX_EXTRA, true, "")
 #endif
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index 86e6b0a..f4f349b 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -674,9 +674,9 @@ static PCIDeviceInfo virtio_info[] = {
         .init      = virtio_blk_init_pci,
         .exit      = virtio_blk_exit_pci,
         .qdev.props = (Property[]) {
-            DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0),
+            DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0, ""),
             DEFINE_BLOCK_PROPERTIES(VirtIOPCIProxy, block),
-            DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
+            DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2, ""),
             DEFINE_VIRTIO_BLK_FEATURES(VirtIOPCIProxy, host_features),
             DEFINE_PROP_END_OF_LIST(),
         },
@@ -688,14 +688,14 @@ static PCIDeviceInfo virtio_info[] = {
         .exit       = virtio_net_exit_pci,
         .romfile    = "pxe-virtio.bin",
         .qdev.props = (Property[]) {
-            DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
+            DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3, ""),
             DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features),
             DEFINE_NIC_PROPERTIES(VirtIOPCIProxy, nic),
             DEFINE_PROP_UINT32("x-txtimer", VirtIOPCIProxy,
-                               net.txtimer, TX_TIMER_INTERVAL),
+                               net.txtimer, TX_TIMER_INTERVAL, ""),
             DEFINE_PROP_INT32("x-txburst", VirtIOPCIProxy,
-                              net.txburst, TX_BURST),
-            DEFINE_PROP_STRING("tx", VirtIOPCIProxy, net.tx),
+                              net.txburst, TX_BURST, ""),
+            DEFINE_PROP_STRING("tx", VirtIOPCIProxy, net.tx, ""),
             DEFINE_PROP_END_OF_LIST(),
         },
         .qdev.reset = virtio_pci_reset,
@@ -707,11 +707,11 @@ static PCIDeviceInfo virtio_info[] = {
         .exit      = virtio_serial_exit_pci,
         .qdev.props = (Property[]) {
             DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
-                               DEV_NVECTORS_UNSPECIFIED),
-            DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0),
+                               DEV_NVECTORS_UNSPECIFIED, ""),
+            DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0, ""),
             DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
             DEFINE_PROP_UINT32("max_ports", VirtIOPCIProxy, max_virtserial_ports,
-                               31),
+                               31, ""),
             DEFINE_PROP_END_OF_LIST(),
         },
         .qdev.reset = virtio_pci_reset,
@@ -732,8 +732,8 @@ static PCIDeviceInfo virtio_info[] = {
         .init      = virtio_9p_init_pci,
         .qdev.props = (Property[]) {
             DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
-            DEFINE_PROP_STRING("mount_tag", VirtIOPCIProxy, fsconf.tag),
-            DEFINE_PROP_STRING("fsdev", VirtIOPCIProxy, fsconf.fsdev_id),
+            DEFINE_PROP_STRING("mount_tag", VirtIOPCIProxy, fsconf.tag, ""),
+            DEFINE_PROP_STRING("fsdev", VirtIOPCIProxy, fsconf.fsdev_id, ""),
             DEFINE_PROP_END_OF_LIST(),
         },
     }, {
diff --git a/hw/virtio.h b/hw/virtio.h
index 96514e6..44af2d3 100644
--- a/hw/virtio.h
+++ b/hw/virtio.h
@@ -204,7 +204,7 @@ void virtio_serial_exit(VirtIODevice *vdev);
 
 #define DEFINE_VIRTIO_COMMON_FEATURES(_state, _field) \
 	DEFINE_PROP_BIT("indirect_desc", _state, _field, \
-			VIRTIO_RING_F_INDIRECT_DESC, true)
+			VIRTIO_RING_F_INDIRECT_DESC, true, "")
 
 target_phys_addr_t virtio_queue_get_desc_addr(VirtIODevice *vdev, int n);
 target_phys_addr_t virtio_queue_get_avail_addr(VirtIODevice *vdev, int n);
diff --git a/hw/vt82c686.c b/hw/vt82c686.c
index cacc217..502cdd2 100644
--- a/hw/vt82c686.c
+++ b/hw/vt82c686.c
@@ -517,7 +517,7 @@ static PCIDeviceInfo via_pm_info = {
     .init               = vt82c686b_pm_initfn,
     .config_write       = pm_write_config,
     .qdev.props         = (Property[]) {
-        DEFINE_PROP_UINT32("smb_io_base", VT686PMState, smb_io_base, 0),
+        DEFINE_PROP_UINT32("smb_io_base", VT686PMState, smb_io_base, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/xilinx_ethlite.c b/hw/xilinx_ethlite.c
index 37e33ec..80fa5b6 100644
--- a/hw/xilinx_ethlite.c
+++ b/hw/xilinx_ethlite.c
@@ -239,8 +239,10 @@ static SysBusDeviceInfo xilinx_ethlite_info = {
     .qdev.name  = "xilinx,ethlite",
     .qdev.size  = sizeof(struct xlx_ethlite),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("txpingpong", struct xlx_ethlite, c_tx_pingpong, 1),
-        DEFINE_PROP_UINT32("rxpingpong", struct xlx_ethlite, c_rx_pingpong, 1),
+        DEFINE_PROP_UINT32("txpingpong", struct xlx_ethlite, c_tx_pingpong, 1,
+                           ""),
+        DEFINE_PROP_UINT32("rxpingpong", struct xlx_ethlite, c_rx_pingpong, 1,
+                           ""),
         DEFINE_NIC_PROPERTIES(struct xlx_ethlite, conf),
         DEFINE_PROP_END_OF_LIST(),
     }
diff --git a/hw/xilinx_intc.c b/hw/xilinx_intc.c
index 8ef6474..c33e878 100644
--- a/hw/xilinx_intc.c
+++ b/hw/xilinx_intc.c
@@ -163,7 +163,8 @@ static SysBusDeviceInfo xilinx_intc_info = {
     .qdev.name  = "xilinx,intc",
     .qdev.size  = sizeof(struct xlx_pic),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("kind-of-intr", struct xlx_pic, c_kind_of_intr, 0),
+        DEFINE_PROP_UINT32("kind-of-intr", struct xlx_pic, c_kind_of_intr, 0,
+                           ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/hw/xilinx_timer.c b/hw/xilinx_timer.c
index e2d9541..65155e7 100644
--- a/hw/xilinx_timer.c
+++ b/hw/xilinx_timer.c
@@ -220,8 +220,8 @@ static SysBusDeviceInfo xilinx_timer_info = {
     .qdev.name  = "xilinx,timer",
     .qdev.size  = sizeof(struct timerblock),
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT32("frequency", struct timerblock, freq_hz,   0),
-        DEFINE_PROP_UINT32("nr-timers", struct timerblock, nr_timers, 0),
+        DEFINE_PROP_UINT32("frequency", struct timerblock, freq_hz,   0, ""),
+        DEFINE_PROP_UINT32("nr-timers", struct timerblock, nr_timers, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     }
 };
diff --git a/net.h b/net.h
index 518cf9c..f11c108 100644
--- a/net.h
+++ b/net.h
@@ -20,9 +20,9 @@ typedef struct NICConf {
 } NICConf;
 
 #define DEFINE_NIC_PROPERTIES(_state, _conf)                            \
-    DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr),                \
-    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan),                   \
-    DEFINE_PROP_NETDEV("netdev", _state, _conf.peer)
+    DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr, ""),            \
+    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan, ""),               \
+    DEFINE_PROP_NETDEV("netdev", _state, _conf.peer, "")
 
 /* VLANs support */
 
diff --git a/usb-linux.c b/usb-linux.c
index c3c38ec..ccbdd42 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -1033,10 +1033,10 @@ static struct USBDeviceInfo usb_host_dev_info = {
     .usbdevice_name = "host",
     .usbdevice_init = usb_host_device_open,
     .qdev.props     = (Property[]) {
-        DEFINE_PROP_UINT32("hostbus",  USBHostDevice, match.bus_num,    0),
-        DEFINE_PROP_UINT32("hostaddr", USBHostDevice, match.addr,       0),
-        DEFINE_PROP_HEX32("vendorid",  USBHostDevice, match.vendor_id,  0),
-        DEFINE_PROP_HEX32("productid", USBHostDevice, match.product_id, 0),
+        DEFINE_PROP_UINT32("hostbus",  USBHostDevice, match.bus_num,    0, ""),
+        DEFINE_PROP_UINT32("hostaddr", USBHostDevice, match.addr,       0, ""),
+        DEFINE_PROP_HEX32("vendorid",  USBHostDevice, match.vendor_id,  0, ""),
+        DEFINE_PROP_HEX32("productid", USBHostDevice, match.product_id, 0, ""),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
-- 
1.7.2.2

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH 2/4] virtio-serial: Add description fields for qdev properties
  2010-09-15 12:36 [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Amit Shah
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 1/4] qdev: Add a description field for qdev properties for documentation Amit Shah
@ 2010-09-15 12:36 ` Amit Shah
  2010-09-28 13:48   ` Markus Armbruster
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 3/4] net.h: Add description fields for qdev properites Amit Shah
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Amit Shah @ 2010-09-15 12:36 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Amit Shah, qemu list

Document the parameters for the virtserialport and virtioconsole
devices.

Example:

$ ./x86_64-softmmu/qemu-system-x86_64 -device virtserialport,?
virtserialport.nr=uint32, The 'number' for the port for \
predictable port numbers. Use this to spawn ports if you \
plan to migrate the guest.

virtserialport.chardev=chr, The chardev to associate this port with.

virtserialport.name=string, Name for the port that's exposed to \
the guest for port discovery.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 hw/virtio-console.c |   17 ++++++++++-------
 hw/virtio-serial.h  |   13 +++++++++++++
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/hw/virtio-console.c b/hw/virtio-console.c
index ccd277a..8a99a99 100644
--- a/hw/virtio-console.c
+++ b/hw/virtio-console.c
@@ -95,11 +95,13 @@ static VirtIOSerialPortInfo virtconsole_info = {
     .init          = virtconsole_initfn,
     .exit          = virtconsole_exitfn,
     .qdev.props = (Property[]) {
-        DEFINE_PROP_UINT8("is_console", VirtConsole, port.is_console, 1, ""),
+        DEFINE_PROP_UINT8("is_console", VirtConsole, port.is_console, 1,
+                          PROP_VIRTSERIAL_IS_CONSOLE_DESC),
         DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID,
-                           ""),
-        DEFINE_PROP_CHR("chardev", VirtConsole, chr, ""),
-        DEFINE_PROP_STRING("name", VirtConsole, port.name, ""),
+                           PROP_VIRTSERIAL_NR_DESC),
+        DEFINE_PROP_CHR("chardev", VirtConsole, chr, PROP_VIRTSERIAL_CHR_DESC),
+        DEFINE_PROP_STRING("name", VirtConsole, port.name,
+                           PROP_VIRTSERIAL_NAME_DESC),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
@@ -133,9 +135,10 @@ static VirtIOSerialPortInfo virtserialport_info = {
     .exit          = virtconsole_exitfn,
     .qdev.props = (Property[]) {
         DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID,
-                           ""),
-        DEFINE_PROP_CHR("chardev", VirtConsole, chr, ""),
-        DEFINE_PROP_STRING("name", VirtConsole, port.name, ""),
+                           PROP_VIRTSERIAL_NR_DESC),
+        DEFINE_PROP_CHR("chardev", VirtConsole, chr, PROP_VIRTSERIAL_CHR_DESC),
+        DEFINE_PROP_STRING("name", VirtConsole, port.name,
+                           PROP_VIRTSERIAL_NAME_DESC),
         DEFINE_PROP_END_OF_LIST(),
     },
 };
diff --git a/hw/virtio-serial.h b/hw/virtio-serial.h
index ff08c40..187d5e4 100644
--- a/hw/virtio-serial.h
+++ b/hw/virtio-serial.h
@@ -57,6 +57,19 @@ struct virtio_console_control {
 
 /* == In-qemu interface == */
 
+#define PROP_VIRTSERIAL_IS_CONSOLE_DESC                                 \
+    "An hvc console will be spawned in the guest if this is set."
+
+#define PROP_VIRTSERIAL_NR_DESC                                         \
+    "The 'number' for the port for predictable port numbers. Use this to " \
+    "spawn ports if you plan to migrate the guest."
+
+#define PROP_VIRTSERIAL_CHR_DESC                \
+    "The chardev to associate this port with."
+
+#define PROP_VIRTSERIAL_NAME_DESC                \
+    "Name for the port that's exposed to the guest for port discovery."
+
 typedef struct VirtIOSerial VirtIOSerial;
 typedef struct VirtIOSerialBus VirtIOSerialBus;
 typedef struct VirtIOSerialPort VirtIOSerialPort;
-- 
1.7.2.2

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH 3/4] net.h: Add description fields for qdev properites
  2010-09-15 12:36 [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Amit Shah
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 1/4] qdev: Add a description field for qdev properties for documentation Amit Shah
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 2/4] virtio-serial: Add description fields for qdev properties Amit Shah
@ 2010-09-15 12:36 ` Amit Shah
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 4/4] block_int.h: Provide documentation for common block qdev properties Amit Shah
  2010-09-28 14:36 ` [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Markus Armbruster
  4 siblings, 0 replies; 12+ messages in thread
From: Amit Shah @ 2010-09-15 12:36 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Amit Shah, qemu list

This results in an output like:

$ ./x86_64-softmmu/qemu-system-x86_64 -device virtio-net-pci,?

...

virtio-net-pci.mac=macaddr, The MAC address for the NIC.
virtio-net-pci.vlan=vlan, The VLAN to associate the NIC with.
virtio-net-pci.netdev=netdev, The peer net device to associate with this virtual NIC.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 net.h |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/net.h b/net.h
index f11c108..b6658fd 100644
--- a/net.h
+++ b/net.h
@@ -20,9 +20,12 @@ typedef struct NICConf {
 } NICConf;
 
 #define DEFINE_NIC_PROPERTIES(_state, _conf)                            \
-    DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr, ""),            \
-    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan, ""),               \
-    DEFINE_PROP_NETDEV("netdev", _state, _conf.peer, "")
+    DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr,                 \
+                        "The MAC address for the NIC."),                \
+    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan,                    \
+                     "The VLAN to associate the NIC with."),            \
+    DEFINE_PROP_NETDEV("netdev", _state, _conf.peer,                    \
+                       "The peer net device to associate with this virtual NIC.")
 
 /* VLANs support */
 
-- 
1.7.2.2

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH 4/4] block_int.h: Provide documentation for common block qdev properties
  2010-09-15 12:36 [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Amit Shah
                   ` (2 preceding siblings ...)
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 3/4] net.h: Add description fields for qdev properites Amit Shah
@ 2010-09-15 12:36 ` Amit Shah
  2010-09-28 14:36 ` [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Markus Armbruster
  4 siblings, 0 replies; 12+ messages in thread
From: Amit Shah @ 2010-09-15 12:36 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Amit Shah, Kevin Wolf, qemu list

Document the options common to all block devices.

This comes from Kevin.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
CC: Kevin Wolf <kwolf@redhat.com>
---
 block_int.h |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/block_int.h b/block_int.h
index ce20285..06e894d 100644
--- a/block_int.h
+++ b/block_int.h
@@ -241,12 +241,14 @@ static inline unsigned int get_physical_block_exp(BlockConf *conf)
 }
 
 #define DEFINE_BLOCK_PROPERTIES(_state, _conf)                          \
-    DEFINE_PROP_DRIVE("drive", _state, _conf.bs, ""),                   \
-    DEFINE_PROP_UINT16("logical_block_size", _state,                    \
-                       _conf.logical_block_size, 512, ""),              \
+    DEFINE_PROP_DRIVE("drive", _state, _conf.bs, "The host drive details, specified by the -drive parameter"), \
+    DEFINE_PROP_UINT16("logical_block_size", _state, _conf.logical_block_size, \
+                       512, "Logical sector size of the disk"),         \
     DEFINE_PROP_UINT16("physical_block_size", _state,                   \
-                       _conf.physical_block_size, 512, ""),             \
-    DEFINE_PROP_UINT16("min_io_size", _state, _conf.min_io_size, 0, ""), \
-    DEFINE_PROP_UINT32("opt_io_size", _state, _conf.opt_io_size, 0, "")
+                       _conf.physical_block_size, 512, "Physical sector size of the disk"), \
+    DEFINE_PROP_UINT16("min_io_size", _state, _conf.min_io_size, 0,     \
+                       "Minimal size for IO requests in bytes. Must be a power of two that is 512 or greater."), \
+    DEFINE_PROP_UINT32("opt_io_size", _state, _conf.opt_io_size, 0,     \
+                       "Size for IO requests that provides optimal performance (in bytes). Must be a power of two that is 512 or greater.")
 
 #endif /* BLOCK_INT_H */
-- 
1.7.2.2

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 2/4] virtio-serial: Add description fields for qdev properties
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 2/4] virtio-serial: Add description fields for qdev properties Amit Shah
@ 2010-09-28 13:48   ` Markus Armbruster
  2010-09-28 14:00     ` Amit Shah
  0 siblings, 1 reply; 12+ messages in thread
From: Markus Armbruster @ 2010-09-28 13:48 UTC (permalink / raw)
  To: Amit Shah; +Cc: qemu list

Amit Shah <amit.shah@redhat.com> writes:

> Document the parameters for the virtserialport and virtioconsole
> devices.
>
> Example:
>
> $ ./x86_64-softmmu/qemu-system-x86_64 -device virtserialport,?
> virtserialport.nr=uint32, The 'number' for the port for \
> predictable port numbers. Use this to spawn ports if you \
> plan to migrate the guest.
>
> virtserialport.chardev=chr, The chardev to associate this port with.
>
> virtserialport.name=string, Name for the port that's exposed to \
> the guest for port discovery.
>
> Signed-off-by: Amit Shah <amit.shah@redhat.com>
> ---
>  hw/virtio-console.c |   17 ++++++++++-------
>  hw/virtio-serial.h  |   13 +++++++++++++
>  2 files changed, 23 insertions(+), 7 deletions(-)
>
> diff --git a/hw/virtio-console.c b/hw/virtio-console.c
> index ccd277a..8a99a99 100644
> --- a/hw/virtio-console.c
> +++ b/hw/virtio-console.c
> @@ -95,11 +95,13 @@ static VirtIOSerialPortInfo virtconsole_info = {
>      .init          = virtconsole_initfn,
>      .exit          = virtconsole_exitfn,
>      .qdev.props = (Property[]) {
> -        DEFINE_PROP_UINT8("is_console", VirtConsole, port.is_console, 1, ""),
> +        DEFINE_PROP_UINT8("is_console", VirtConsole, port.is_console, 1,
> +                          PROP_VIRTSERIAL_IS_CONSOLE_DESC),
>          DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID,
> -                           ""),
> -        DEFINE_PROP_CHR("chardev", VirtConsole, chr, ""),
> -        DEFINE_PROP_STRING("name", VirtConsole, port.name, ""),
> +                           PROP_VIRTSERIAL_NR_DESC),
> +        DEFINE_PROP_CHR("chardev", VirtConsole, chr, PROP_VIRTSERIAL_CHR_DESC),
> +        DEFINE_PROP_STRING("name", VirtConsole, port.name,
> +                           PROP_VIRTSERIAL_NAME_DESC),
>          DEFINE_PROP_END_OF_LIST(),
>      },
>  };
> @@ -133,9 +135,10 @@ static VirtIOSerialPortInfo virtserialport_info = {
>      .exit          = virtconsole_exitfn,
>      .qdev.props = (Property[]) {
>          DEFINE_PROP_UINT32("nr", VirtConsole, port.id, VIRTIO_CONSOLE_BAD_ID,
> -                           ""),
> -        DEFINE_PROP_CHR("chardev", VirtConsole, chr, ""),
> -        DEFINE_PROP_STRING("name", VirtConsole, port.name, ""),
> +                           PROP_VIRTSERIAL_NR_DESC),
> +        DEFINE_PROP_CHR("chardev", VirtConsole, chr, PROP_VIRTSERIAL_CHR_DESC),
> +        DEFINE_PROP_STRING("name", VirtConsole, port.name,
> +                           PROP_VIRTSERIAL_NAME_DESC),
>          DEFINE_PROP_END_OF_LIST(),
>      },
>  };
> diff --git a/hw/virtio-serial.h b/hw/virtio-serial.h
> index ff08c40..187d5e4 100644
> --- a/hw/virtio-serial.h
> +++ b/hw/virtio-serial.h
> @@ -57,6 +57,19 @@ struct virtio_console_control {
>  
>  /* == In-qemu interface == */
>  
> +#define PROP_VIRTSERIAL_IS_CONSOLE_DESC                                 \
> +    "An hvc console will be spawned in the guest if this is set."
> +
> +#define PROP_VIRTSERIAL_NR_DESC                                         \
> +    "The 'number' for the port for predictable port numbers. Use this to " \
> +    "spawn ports if you plan to migrate the guest."
> +
> +#define PROP_VIRTSERIAL_CHR_DESC                \
> +    "The chardev to associate this port with."
> +
> +#define PROP_VIRTSERIAL_NAME_DESC                \
> +    "Name for the port that's exposed to the guest for port discovery."
> +
>  typedef struct VirtIOSerial VirtIOSerial;
>  typedef struct VirtIOSerialBus VirtIOSerialBus;
>  typedef struct VirtIOSerialPort VirtIOSerialPort;

Do you expect these macros to be used elsewhere?  If not, I'd rather
have them right next to their use, so that they do double-duty
documenting source code.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 1/4] qdev: Add a description field for qdev properties for documentation
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 1/4] qdev: Add a description field for qdev properties for documentation Amit Shah
@ 2010-09-28 13:52   ` Markus Armbruster
  2010-09-28 14:02     ` Amit Shah
  0 siblings, 1 reply; 12+ messages in thread
From: Markus Armbruster @ 2010-09-28 13:52 UTC (permalink / raw)
  To: Amit Shah; +Cc: qemu list

Amit Shah <amit.shah@redhat.com> writes:

> Add a 'description' along with each qdev property to document the input
> each qdev property takes.
[...]
> diff --git a/hw/qdev.c b/hw/qdev.c
> index 35858cb..b415025 100644
> --- a/hw/qdev.c
> +++ b/hw/qdev.c
> @@ -188,7 +188,8 @@ int qdev_device_help(QemuOpts *opts)
>          if (!prop->info->parse) {
>              continue;           /* no way to set it, don't show */
>          }
> -        error_printf("%s.%s=%s\n", info->name, prop->name, prop->info->name);
> +        error_printf("%s.%s=%s, %s\n", info->name, prop->name,
> +                     prop->info->name, prop->desc ?: "");
>      }
>      return 1;
>  }

This is the only patch hunk that isn't about defining or initializing
the new member desc, isn't it?

[...]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 2/4] virtio-serial: Add description fields for qdev properties
  2010-09-28 13:48   ` Markus Armbruster
@ 2010-09-28 14:00     ` Amit Shah
  0 siblings, 0 replies; 12+ messages in thread
From: Amit Shah @ 2010-09-28 14:00 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu list

On (Tue) Sep 28 2010 [15:48:26], Markus Armbruster wrote:
> > diff --git a/hw/virtio-serial.h b/hw/virtio-serial.h
> > index ff08c40..187d5e4 100644
> > --- a/hw/virtio-serial.h
> > +++ b/hw/virtio-serial.h
> > @@ -57,6 +57,19 @@ struct virtio_console_control {
> >  
> >  /* == In-qemu interface == */
> >  
> > +#define PROP_VIRTSERIAL_IS_CONSOLE_DESC                                 \
> > +    "An hvc console will be spawned in the guest if this is set."
> > +
> > +#define PROP_VIRTSERIAL_NR_DESC                                         \
> > +    "The 'number' for the port for predictable port numbers. Use this to " \
> > +    "spawn ports if you plan to migrate the guest."
> > +
> > +#define PROP_VIRTSERIAL_CHR_DESC                \
> > +    "The chardev to associate this port with."
> > +
> > +#define PROP_VIRTSERIAL_NAME_DESC                \
> > +    "Name for the port that's exposed to the guest for port discovery."
> > +
> >  typedef struct VirtIOSerial VirtIOSerial;
> >  typedef struct VirtIOSerialBus VirtIOSerialBus;
> >  typedef struct VirtIOSerialPort VirtIOSerialPort;
> 
> Do you expect these macros to be used elsewhere?  If not, I'd rather
> have them right next to their use, so that they do double-duty
> documenting source code.

Yes, other users of virtio-serial, like spice, clipboard sharing apps,
etc.

		Amit

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 1/4] qdev: Add a description field for qdev properties for documentation
  2010-09-28 13:52   ` Markus Armbruster
@ 2010-09-28 14:02     ` Amit Shah
  0 siblings, 0 replies; 12+ messages in thread
From: Amit Shah @ 2010-09-28 14:02 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: qemu list

On (Tue) Sep 28 2010 [15:52:02], Markus Armbruster wrote:
> Amit Shah <amit.shah@redhat.com> writes:
> 
> > Add a 'description' along with each qdev property to document the input
> > each qdev property takes.
> [...]
> > diff --git a/hw/qdev.c b/hw/qdev.c
> > index 35858cb..b415025 100644
> > --- a/hw/qdev.c
> > +++ b/hw/qdev.c
> > @@ -188,7 +188,8 @@ int qdev_device_help(QemuOpts *opts)
> >          if (!prop->info->parse) {
> >              continue;           /* no way to set it, don't show */
> >          }
> > -        error_printf("%s.%s=%s\n", info->name, prop->name, prop->info->name);
> > +        error_printf("%s.%s=%s, %s\n", info->name, prop->name,
> > +                     prop->info->name, prop->desc ?: "");
> >      }
> >      return 1;
> >  }
> 
> This is the only patch hunk that isn't about defining or initializing
> the new member desc, isn't it?

Right; the other hunks just add the new desc field for all the callers.

		Amit

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options
  2010-09-15 12:36 [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Amit Shah
                   ` (3 preceding siblings ...)
  2010-09-15 12:36 ` [Qemu-devel] [PATCH 4/4] block_int.h: Provide documentation for common block qdev properties Amit Shah
@ 2010-09-28 14:36 ` Markus Armbruster
  4 siblings, 0 replies; 12+ messages in thread
From: Markus Armbruster @ 2010-09-28 14:36 UTC (permalink / raw)
  To: Amit Shah; +Cc: qemu list

Amit Shah <amit.shah@redhat.com> writes:

> Hello,
>
> This is a rebase of the patchset I'd sent earlier.
>
> I add the 4/4 patch, documenting common block device properties.
> Other than that, the usual notes apply: this is just the start, just
> getting the framework in place and a few examples so that people can
> then pick up and start documenting their devices and options.  We want
> to see all of the devices covered, and hopefully turn on
> build_bug_on() on an empty doc string.
>
> Maintainers should perhaps also look for patches that introduce
> options without documentation.
>
> That's the long-term goal (over 0.14).  For short-term, I'll be
> preparing follow-on patches that add doc strings for a few more
> options and perhaps bug people based on git history as to what
> documentation is to be added for some options.
>
> If this looks acceptable, please apply!

For QMP, we'll need to cover more than just device properties, and in
more detail than just a help text, but this looks like a sensible step
forward.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH 3/4] net.h: Add description fields for qdev properites
  2010-11-25 17:31 [Qemu-devel] [PATCH 0/4] [RESEND] [REBASE] Auto-document qdev devices Amit Shah
@ 2010-11-25 17:31 ` Amit Shah
  0 siblings, 0 replies; 12+ messages in thread
From: Amit Shah @ 2010-11-25 17:31 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Amit Shah, qemu list

This results in an output like:

$ ./x86_64-softmmu/qemu-system-x86_64 -device virtio-net-pci,?

...

virtio-net-pci.mac=macaddr, The MAC address for the NIC.
virtio-net-pci.vlan=vlan, The VLAN to associate the NIC with.
virtio-net-pci.netdev=netdev, The peer net device to associate with this virtual NIC.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 net.h |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/net.h b/net.h
index 25e7968..b3be73c 100644
--- a/net.h
+++ b/net.h
@@ -20,9 +20,12 @@ typedef struct NICConf {
 } NICConf;
 
 #define DEFINE_NIC_PROPERTIES(_state, _conf)                            \
-    DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr, ""),            \
-    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan, ""),               \
-    DEFINE_PROP_NETDEV("netdev", _state, _conf.peer, "")
+    DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr,                 \
+                        "The MAC address for the NIC."),                \
+    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan,                    \
+                     "The VLAN to associate the NIC with."),            \
+    DEFINE_PROP_NETDEV("netdev", _state, _conf.peer,                    \
+                       "The peer net device to associate with this virtual NIC.")
 
 /* VLANs support */
 
-- 
1.7.3.2

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH 3/4] net.h: Add description fields for qdev properites
  2011-01-04 12:22 [Qemu-devel] [PATCH 0/4] [RESEND] [REBASE] Auto-document qdev devices Amit Shah
@ 2011-01-04 12:22 ` Amit Shah
  0 siblings, 0 replies; 12+ messages in thread
From: Amit Shah @ 2011-01-04 12:22 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Amit Shah, qemu list

This results in an output like:

$ ./x86_64-softmmu/qemu-system-x86_64 -device virtio-net-pci,?

...

virtio-net-pci.mac=macaddr, The MAC address for the NIC.
virtio-net-pci.vlan=vlan, The VLAN to associate the NIC with.
virtio-net-pci.netdev=netdev, The peer net device to associate with this virtual NIC.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 net.h |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/net.h b/net.h
index aa4454b..9cfd2ed 100644
--- a/net.h
+++ b/net.h
@@ -21,10 +21,14 @@ typedef struct NICConf {
 } NICConf;
 
 #define DEFINE_NIC_PROPERTIES(_state, _conf)                            \
-    DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr, ""),            \
-    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan, ""),               \
-    DEFINE_PROP_NETDEV("netdev", _state, _conf.peer, ""),               \
-    DEFINE_PROP_INT32("bootindex", _state, _conf.bootindex, -1, "")
+    DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr,                 \
+                        "The MAC address for the NIC."),                \
+    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan,                    \
+                     "The VLAN to associate the NIC with."),            \
+    DEFINE_PROP_NETDEV("netdev", _state, _conf.peer,                    \
+                       "The peer net device to associate with this virtual NIC."), \
+    DEFINE_PROP_INT32("bootindex", _state, _conf.bootindex, -1,         \
+                      "The index this NIC will be tried to boot from")
 
 /* VLANs support */
 
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2011-01-04 12:22 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-15 12:36 [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Amit Shah
2010-09-15 12:36 ` [Qemu-devel] [PATCH 1/4] qdev: Add a description field for qdev properties for documentation Amit Shah
2010-09-28 13:52   ` Markus Armbruster
2010-09-28 14:02     ` Amit Shah
2010-09-15 12:36 ` [Qemu-devel] [PATCH 2/4] virtio-serial: Add description fields for qdev properties Amit Shah
2010-09-28 13:48   ` Markus Armbruster
2010-09-28 14:00     ` Amit Shah
2010-09-15 12:36 ` [Qemu-devel] [PATCH 3/4] net.h: Add description fields for qdev properites Amit Shah
2010-09-15 12:36 ` [Qemu-devel] [PATCH 4/4] block_int.h: Provide documentation for common block qdev properties Amit Shah
2010-09-28 14:36 ` [Qemu-devel] [PATCH 0/4] First steps towards documenting qdev devices/options Markus Armbruster
  -- strict thread matches above, loose matches on Subject: below --
2010-11-25 17:31 [Qemu-devel] [PATCH 0/4] [RESEND] [REBASE] Auto-document qdev devices Amit Shah
2010-11-25 17:31 ` [Qemu-devel] [PATCH 3/4] net.h: Add description fields for qdev properites Amit Shah
2011-01-04 12:22 [Qemu-devel] [PATCH 0/4] [RESEND] [REBASE] Auto-document qdev devices Amit Shah
2011-01-04 12:22 ` [Qemu-devel] [PATCH 3/4] net.h: Add description fields for qdev properites Amit Shah

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).