--- qemu-kvm-1.1.1/hw/virtio-pci.c	2012-07-16 09:52:03.000000000 +0200
+++ qemu-kvm-1.1.1-vpfring-diff/virtio-pci.c	2012-09-04 01:13:24.000000000 +0200
@@ -21,6 +21,7 @@
 #include "virtio-blk.h"
 #include "virtio-net.h"
 #include "virtio-serial.h"
+#include "vnplug-ctrl.h"
 #include "virtio-scsi.h"
 #include "pci.h"
 #include "qemu-error.h"
@@ -886,6 +887,27 @@
     return virtio_exit_pci(pci_dev);
 }
 
+static int vnplug_ctrl_init_pci(PCIDevice *pci_dev)
+{
+	VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
+	VirtIODevice *vdev;
+
+	vdev = vnplug_ctrl_init(&pci_dev->qdev);
+
+	virtio_init_pci(proxy, vdev);
+
+	proxy->nvectors = vdev->nvectors;
+	return 0;
+}
+
+static int vnplug_ctrl_exit_pci(PCIDevice *pci_dev)
+{
+	VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
+
+	vnplug_ctrl_exit(proxy->vdev);
+	return virtio_exit_pci(pci_dev);
+}
+
 static Property virtio_blk_properties[] = {
     DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0),
     DEFINE_BLOCK_PROPERTIES(VirtIOPCIProxy, blk.conf),
@@ -1014,6 +1036,34 @@
     .class_init    = virtio_balloon_class_init,
 };
 
+static Property vnplug_ctrl_properties[] = {
+    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static void vnplug_ctrl_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
+
+    k->init = vnplug_ctrl_init_pci;
+    k->exit = vnplug_ctrl_exit_pci;
+    //k->romfile = "pxe-vnplug.rom";
+    k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    k->device_id = PCI_DEVICE_ID_VNPLUG_CTRL;
+    k->revision = VIRTIO_PCI_ABI_VERSION;
+    k->class_id = PCI_CLASS_NETWORK_ETHERNET;
+    dc->reset = virtio_pci_reset;
+    dc->props = vnplug_ctrl_properties;
+}
+
+static TypeInfo vnplug_ctrl_info = {
+    .name          = "vnplug",
+    .parent        = TYPE_PCI_DEVICE,
+    .instance_size = sizeof(VirtIOPCIProxy),
+    .class_init    = vnplug_ctrl_class_init,
+};
+
 static int virtio_scsi_init_pci(PCIDevice *pci_dev)
 {
     VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
@@ -1075,6 +1125,7 @@
     type_register_static(&virtio_serial_info);
     type_register_static(&virtio_balloon_info);
     type_register_static(&virtio_scsi_info);
+    type_register_static(&vnplug_ctrl_info);
 }
 
 type_init(virtio_pci_register_types)
