Patchwork [RfC,v3,09/10] ne2k_pci: qdev-ify.

login
register
mail settings
Submitter Gerd Hoffmann
Date Oct. 16, 2009, 1:42 p.m.
Message ID <1255700523-15270-10-git-send-email-kraxel@redhat.com>
Download mbox | patch
Permalink /patch/36224/
State New
Headers show

Comments

Gerd Hoffmann - Oct. 16, 2009, 1:42 p.m.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/ne2000.c |   27 +++++++++++++++++++++------
 1 files changed, 21 insertions(+), 6 deletions(-)

Patch

diff --git a/hw/ne2000.c b/hw/ne2000.c
index 7ce56ff..f296b10 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -758,22 +758,37 @@  static int pci_ne2000_init(PCIDevice *pci_dev)
                            PCI_ADDRESS_SPACE_IO, ne2000_map);
     s = &d->ne2000;
     s->irq = d->dev.irq[0];
-    qdev_get_macaddr(&d->dev.qdev, s->c.macaddr.a);
+
+    qemu_macaddr_default_if_unset(&s->c.macaddr);
     ne2000_reset(s);
-    s->vc = qdev_get_vlan_client(&d->dev.qdev,
+    s->vc = qemu_new_vlan_client(s->c.vlan, s->c.peer,
+                                 pci_dev->qdev.info->name, pci_dev->qdev.id,
                                  ne2000_can_receive, ne2000_receive, NULL,
                                  ne2000_cleanup, s);
-
     qemu_format_nic_info_str(s->vc, s->c.macaddr.a);
 
     register_savevm("ne2000", -1, 3, pci_ne2000_save, pci_ne2000_load, d);
     return 0;
 }
 
+static int pci_ne2000_exit(PCIDevice *pci_dev)
+{
+    PCINE2000State *d = DO_UPCAST(PCINE2000State, dev, pci_dev);
+    NE2000State *s = &d->ne2000;
+
+    qemu_del_vlan_client(s->vc);
+    return 0;
+}
+
 static PCIDeviceInfo ne2000_info = {
-    .qdev.name = "ne2k_pci",
-    .qdev.size = sizeof(PCINE2000State),
-    .init      = pci_ne2000_init,
+    .qdev.name  = "ne2k_pci",
+    .qdev.size  = sizeof(PCINE2000State),
+    .init       = pci_ne2000_init,
+    .exit       = pci_ne2000_exit,
+    .qdev.props = (Property[]) {
+        DEFINE_NIC_PROPERTIES(PCINE2000State, ne2000.c),
+        DEFINE_PROP_END_OF_LIST(),
+    }
 };
 
 static void ne2000_register_devices(void)