[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [6593] qemu: return PCIDevice on net device init and record
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [6593] qemu: return PCIDevice on net device init and record devfn ( Marcelo Tosatti) |
Date: |
Wed, 11 Feb 2009 15:19:52 +0000 |
Revision: 6593
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6593
Author: aliguori
Date: 2009-02-11 15:19:52 +0000 (Wed, 11 Feb 2009)
Log Message:
-----------
qemu: return PCIDevice on net device init and record devfn (Marcelo Tosatti)
Change the PCI network drivers init functions to return the PCIDev, to
inform which slot has been hot-plugged.
Also record PCIDevice structure on NICInfo to locate for release on
hot-removal.
Signed-off-by: Marcelo Tosatti <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>
Modified Paths:
--------------
trunk/hw/e1000.c
trunk/hw/eepro100.c
trunk/hw/ne2000.c
trunk/hw/pci.c
trunk/hw/pci.h
trunk/hw/pcnet.c
trunk/hw/rtl8139.c
trunk/hw/virtio-net.c
trunk/hw/virtio-net.h
trunk/net.h
Modified: trunk/hw/e1000.c
===================================================================
--- trunk/hw/e1000.c 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/e1000.c 2009-02-11 15:19:52 UTC (rev 6593)
@@ -1034,7 +1034,7 @@
excluded_regs[i] - 4);
}
-void
+PCIDevice *
pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn)
{
E1000State *d;
@@ -1092,4 +1092,6 @@
qemu_format_nic_info_str(d->vc, d->nd->macaddr);
register_savevm(info_str, -1, 2, nic_save, nic_load, d);
+
+ return (PCIDevice *)d;
}
Modified: trunk/hw/eepro100.c
===================================================================
--- trunk/hw/eepro100.c 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/eepro100.c 2009-02-11 15:19:52 UTC (rev 6593)
@@ -1735,7 +1735,7 @@
qemu_put_buffer(f, s->configuration, sizeof(s->configuration));
}
-static void nic_init(PCIBus * bus, NICInfo * nd,
+static PCIDevice *nic_init(PCIBus * bus, NICInfo * nd,
const char *name, uint32_t device)
{
PCIEEPRO100State *d;
@@ -1783,22 +1783,23 @@
qemu_register_reset(nic_reset, s);
register_savevm(name, -1, 3, nic_save, nic_load, s);
+ return (PCIDevice *)d;
}
-void pci_i82551_init(PCIBus * bus, NICInfo * nd, int devfn)
+PCIDevice *pci_i82551_init(PCIBus * bus, NICInfo * nd, int devfn)
{
- nic_init(bus, nd, "i82551", i82551);
+ return nic_init(bus, nd, "i82551", i82551);
//~ uint8_t *pci_conf = d->dev.config;
}
-void pci_i82557b_init(PCIBus * bus, NICInfo * nd, int devfn)
+PCIDevice *pci_i82557b_init(PCIBus * bus, NICInfo * nd, int devfn)
{
- nic_init(bus, nd, "i82557b", i82557B);
+ return nic_init(bus, nd, "i82557b", i82557B);
}
-void pci_i82559er_init(PCIBus * bus, NICInfo * nd, int devfn)
+PCIDevice *pci_i82559er_init(PCIBus * bus, NICInfo * nd, int devfn)
{
- nic_init(bus, nd, "i82559er", i82559ER);
+ return nic_init(bus, nd, "i82559er", i82559ER);
}
/* eof */
Modified: trunk/hw/ne2000.c
===================================================================
--- trunk/hw/ne2000.c 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/ne2000.c 2009-02-11 15:19:52 UTC (rev 6593)
@@ -777,7 +777,7 @@
register_ioport_read(addr + 0x1f, 1, 1, ne2000_reset_ioport_read, s);
}
-void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn)
+PCIDevice *pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn)
{
PCINE2000State *d;
NE2000State *s;
@@ -807,4 +807,6 @@
qemu_format_nic_info_str(s->vc, s->macaddr);
register_savevm("ne2000", -1, 3, ne2000_save, ne2000_load, s);
+
+ return (PCIDevice *)d;
}
Modified: trunk/hw/pci.c
===================================================================
--- trunk/hw/pci.c 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/pci.c 2009-02-11 15:19:52 UTC (rev 6593)
@@ -662,7 +662,7 @@
NULL
};
-typedef void (*PCINICInitFn)(PCIBus *, NICInfo *, int);
+typedef PCIDevice *(*PCINICInitFn)(PCIBus *, NICInfo *, int);
static PCINICInitFn pci_nic_init_fns[] = {
pci_ne2000_init,
@@ -677,16 +677,23 @@
};
/* Initialize a PCI NIC. */
-void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn,
+PCIDevice *pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn,
const char *default_model)
{
+ PCIDevice *pci_dev;
int i;
qemu_check_nic_model_list(nd, pci_nic_models, default_model);
for (i = 0; pci_nic_models[i]; i++)
- if (strcmp(nd->model, pci_nic_models[i]) == 0)
- pci_nic_init_fns[i](bus, nd, devfn);
+ if (strcmp(nd->model, pci_nic_models[i]) == 0) {
+ pci_dev = pci_nic_init_fns[i](bus, nd, devfn);
+ if (pci_dev)
+ nd->private = pci_dev;
+ return pci_dev;
+ }
+
+ return NULL;
}
typedef struct {
Modified: trunk/hw/pci.h
===================================================================
--- trunk/hw/pci.h 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/pci.h 2009-02-11 15:19:52 UTC (rev 6593)
@@ -220,7 +220,7 @@
PCIBus *pci_register_bus(pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
qemu_irq *pic, int devfn_min, int nirq);
-void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn,
+PCIDevice *pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn,
const char *default_model);
void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len);
uint32_t pci_data_read(void *opaque, uint32_t addr, int len);
@@ -269,23 +269,23 @@
/* eepro100.c */
-void pci_i82551_init(PCIBus *bus, NICInfo *nd, int devfn);
-void pci_i82557b_init(PCIBus *bus, NICInfo *nd, int devfn);
-void pci_i82559er_init(PCIBus *bus, NICInfo *nd, int devfn);
+PCIDevice *pci_i82551_init(PCIBus *bus, NICInfo *nd, int devfn);
+PCIDevice *pci_i82557b_init(PCIBus *bus, NICInfo *nd, int devfn);
+PCIDevice *pci_i82559er_init(PCIBus *bus, NICInfo *nd, int devfn);
/* ne2000.c */
-void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn);
+PCIDevice *pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn);
/* rtl8139.c */
-void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn);
+PCIDevice *pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn);
/* e1000.c */
-void pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn);
+PCIDevice *pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn);
/* pcnet.c */
-void pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn);
+PCIDevice *pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn);
/* prep_pci.c */
PCIBus *pci_prep_init(qemu_irq *pic);
Modified: trunk/hw/pcnet.c
===================================================================
--- trunk/hw/pcnet.c 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/pcnet.c 2009-02-11 15:19:52 UTC (rev 6593)
@@ -1985,7 +1985,7 @@
cpu_physical_memory_read(addr, buf, len);
}
-void pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn)
+PCIDevice *pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn)
{
PCNetState *d;
uint8_t *pci_conf;
@@ -2032,6 +2032,7 @@
d->pci_dev = &d->dev;
pcnet_common_init(d, nd);
+ return (PCIDevice *)d;
}
/* SPARC32 interface */
Modified: trunk/hw/rtl8139.c
===================================================================
--- trunk/hw/rtl8139.c 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/rtl8139.c 2009-02-11 15:19:52 UTC (rev 6593)
@@ -3414,7 +3414,7 @@
}
#endif /* RTL8139_ONBOARD_TIMER */
-void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn)
+PCIDevice *pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn)
{
PCIRTL8139State *d;
RTL8139State *s;
@@ -3466,4 +3466,5 @@
qemu_mod_timer(s->timer,
rtl8139_get_next_tctr_time(s,qemu_get_clock(vm_clock)));
#endif /* RTL8139_ONBOARD_TIMER */
+ return (PCIDevice *)d;
}
Modified: trunk/hw/virtio-net.c
===================================================================
--- trunk/hw/virtio-net.c 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/virtio-net.c 2009-02-11 15:19:52 UTC (rev 6593)
@@ -560,7 +560,7 @@
return 0;
}
-void virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn)
+PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn)
{
VirtIONet *n;
static int virtio_net_id;
@@ -574,7 +574,7 @@
sizeof(struct virtio_net_config),
sizeof(VirtIONet));
if (!n)
- return;
+ return NULL;
n->vdev.get_config = virtio_net_get_config;
n->vdev.set_config = virtio_net_set_config;
@@ -599,12 +599,13 @@
n->mac_table.macs = qemu_mallocz(MAC_TABLE_ENTRIES * ETH_ALEN);
if (!n->mac_table.macs)
- return;
+ return NULL;
n->vlans = qemu_mallocz(MAX_VLAN >> 3);
if (!n->vlans)
- return;
+ return NULL;
register_savevm("virtio-net", virtio_net_id++, VIRTIO_NET_VM_VERSION,
virtio_net_save, virtio_net_load, n);
+ return (PCIDevice *)n;
}
Modified: trunk/hw/virtio-net.h
===================================================================
--- trunk/hw/virtio-net.h 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/hw/virtio-net.h 2009-02-11 15:19:52 UTC (rev 6593)
@@ -85,7 +85,7 @@
uint16_t num_buffers; /* Number of merged rx buffers */
};
-void virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn);
+PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn);
/*
* Control virtqueue data structures
Modified: trunk/net.h
===================================================================
--- trunk/net.h 2009-02-11 15:19:46 UTC (rev 6592)
+++ trunk/net.h 2009-02-11 15:19:52 UTC (rev 6593)
@@ -64,6 +64,7 @@
const char *model;
const char *name;
VLANState *vlan;
+ void *private;
};
extern int nb_nics;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [6593] qemu: return PCIDevice on net device init and record devfn ( Marcelo Tosatti),
Anthony Liguori <=