Revision 9d07d757

b/hw/e1000.c
1051 1051
    return 0;
1052 1052
}
1053 1053

  
1054
PCIDevice *
1055
pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn)
1054
static void pci_e1000_init(PCIDevice *pci_dev)
1056 1055
{
1057
    E1000State *d;
1056
    E1000State *d = (E1000State *)pci_dev;
1058 1057
    uint8_t *pci_conf;
1059 1058
    uint16_t checksum = 0;
1060 1059
    static const char info_str[] = "e1000";
1061 1060
    int i;
1062

  
1063
    d = (E1000State *)pci_register_device(bus, "e1000",
1064
                sizeof(E1000State), devfn, NULL, NULL);
1065

  
1066
    if (!d)
1067
	return NULL;
1061
    uint8_t macaddr[6];
1068 1062

  
1069 1063
    pci_conf = d->dev.config;
1070 1064

  
......
1089 1083

  
1090 1084
    memmove(d->eeprom_data, e1000_eeprom_template,
1091 1085
        sizeof e1000_eeprom_template);
1086
    qdev_get_macaddr(&d->dev.qdev, macaddr);
1092 1087
    for (i = 0; i < 3; i++)
1093
        d->eeprom_data[i] = (nd->macaddr[2*i+1]<<8) | nd->macaddr[2*i];
1088
        d->eeprom_data[i] = (macaddr[2*i+1]<<8) | macaddr[2*i];
1094 1089
    for (i = 0; i < EEPROM_CHECKSUM_REG; i++)
1095 1090
        checksum += d->eeprom_data[i];
1096 1091
    checksum = (uint16_t) EEPROM_SUM - checksum;
......
1103 1098
    d->rxbuf_min_shift = 1;
1104 1099
    memset(&d->tx, 0, sizeof d->tx);
1105 1100

  
1106
    d->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name,
1101
    d->vc = qdev_get_vlan_client(&d->dev.qdev,
1107 1102
                                 e1000_receive, e1000_can_receive,
1108 1103
                                 e1000_cleanup, d);
1109 1104
    d->vc->link_status_changed = e1000_set_link_status;
1110 1105

  
1111
    qemu_format_nic_info_str(d->vc, nd->macaddr);
1106
    qemu_format_nic_info_str(d->vc, macaddr);
1112 1107

  
1113 1108
    register_savevm(info_str, -1, 2, nic_save, nic_load, d);
1114 1109
    d->dev.unregister = pci_e1000_uninit;
1110
}
1115 1111

  
1116
    return (PCIDevice *)d;
1112
static void e1000_register_devices(void)
1113
{
1114
    pci_qdev_register("e1000", sizeof(E1000State), pci_e1000_init);
1117 1115
}
1116

  
1117
device_init(e1000_register_devices)
b/hw/eepro100.c
1728 1728
    return 0;
1729 1729
}
1730 1730

  
1731
static PCIDevice *nic_init(PCIBus * bus, NICInfo * nd, uint32_t device)
1731
static void nic_init(PCIDevice *pci_dev, uint32_t device)
1732 1732
{
1733
    PCIEEPRO100State *d;
1733
    PCIEEPRO100State *d = (PCIEEPRO100State *)pci_dev;
1734 1734
    EEPRO100State *s;
1735 1735

  
1736 1736
    logout("\n");
1737 1737

  
1738
    d = (PCIEEPRO100State *) pci_register_device(bus, nd->model,
1739
                                                 sizeof(PCIEEPRO100State), -1,
1740
                                                 NULL, NULL);
1741
    if (!d)
1742
        return NULL;
1743

  
1744 1738
    d->dev.unregister = pci_nic_uninit;
1745 1739

  
1746 1740
    s = &d->eepro100;
......
1765 1759
    pci_register_io_region(&d->dev, 2, PCI_FLASH_SIZE, PCI_ADDRESS_SPACE_MEM,
1766 1760
                           pci_mmio_map);
1767 1761

  
1768
    memcpy(s->macaddr, nd->macaddr, 6);
1762
    qdev_get_macaddr(&d->dev.qdev, s->macaddr);
1769 1763
    logout("macaddr: %s\n", nic_dump(&s->macaddr[0], 6));
1770 1764
    assert(s->region[1] == 0);
1771 1765

  
1772 1766
    nic_reset(s);
1773 1767

  
1774
    s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name,
1768
    s->vc = qdev_get_vlan_client(&d->dev.qdev,
1775 1769
                                 nic_receive, nic_can_receive,
1776 1770
                                 nic_cleanup, s);
1777 1771

  
......
1780 1774
    qemu_register_reset(nic_reset, s);
1781 1775

  
1782 1776
    register_savevm(s->vc->model, -1, 3, nic_save, nic_load, s);
1783
    return (PCIDevice *)d;
1784 1777
}
1785 1778

  
1786
PCIDevice *pci_i82551_init(PCIBus * bus, NICInfo * nd, int devfn)
1779
static void pci_i82551_init(PCIDevice *dev)
1780
{
1781
    nic_init(dev, i82551);
1782
}
1783

  
1784
static void pci_i82557b_init(PCIDevice *dev)
1787 1785
{
1788
    return nic_init(bus, nd, i82551);
1786
    nic_init(dev, i82557B);
1789 1787
}
1790 1788

  
1791
PCIDevice *pci_i82557b_init(PCIBus * bus, NICInfo * nd, int devfn)
1789
static void pci_i82559er_init(PCIDevice *dev)
1792 1790
{
1793
    return nic_init(bus, nd, i82557B);
1791
    nic_init(dev, i82559ER);
1794 1792
}
1795 1793

  
1796
PCIDevice *pci_i82559er_init(PCIBus * bus, NICInfo * nd, int devfn)
1794
static void eepro100_register_devices(void)
1797 1795
{
1798
    return nic_init(bus, nd, i82559ER);
1796
    pci_qdev_register("i82551", sizeof(PCIEEPRO100State),
1797
                      pci_i82551_init);
1798
    pci_qdev_register("i82557b", sizeof(PCIEEPRO100State),
1799
                      pci_i82557b_init);
1800
    pci_qdev_register("i82559er", sizeof(PCIEEPRO100State),
1801
                      pci_i82559er_init);
1799 1802
}
1800 1803

  
1801
/* eof */
1804
device_init(eepro100_register_devices)
b/hw/ne2000.c
800 800
    unregister_savevm("ne2000", s);
801 801
}
802 802

  
803
PCIDevice *pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn)
803
static void pci_ne2000_init(PCIDevice *pci_dev)
804 804
{
805
    PCINE2000State *d;
805
    PCINE2000State *d = (PCINE2000State *)pci_dev;
806 806
    NE2000State *s;
807 807
    uint8_t *pci_conf;
808 808

  
809
    d = (PCINE2000State *)pci_register_device(bus,
810
                                              "NE2000", sizeof(PCINE2000State),
811
                                              devfn,
812
                                              NULL, NULL);
813
    if (!d)
814
       return NULL;
815

  
816 809
    pci_conf = d->dev.config;
817 810
    pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_REALTEK);
818 811
    pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_REALTEK_8029);
......
825 818
    s = &d->ne2000;
826 819
    s->irq = d->dev.irq[0];
827 820
    s->pci_dev = (PCIDevice *)d;
828
    memcpy(s->macaddr, nd->macaddr, 6);
821
    qdev_get_macaddr(&d->dev.qdev, s->macaddr);
829 822
    ne2000_reset(s);
830
    s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name,
823
    s->vc = qdev_get_vlan_client(&d->dev.qdev,
831 824
                                 ne2000_receive, ne2000_can_receive,
832 825
                                 ne2000_cleanup, s);
833 826

  
834 827
    qemu_format_nic_info_str(s->vc, s->macaddr);
835 828

  
836 829
    register_savevm("ne2000", -1, 3, ne2000_save, ne2000_load, s);
830
}
837 831

  
838
    return (PCIDevice *)d;
832
static void ne2000_register_devices(void)
833
{
834
    pci_qdev_register("ne2k_pci", sizeof(PCINE2000State), pci_ne2000_init);
839 835
}
836

  
837
device_init(ne2000_register_devices)
b/hw/pci.c
799 799
    NULL
800 800
};
801 801

  
802
typedef PCIDevice *(*PCINICInitFn)(PCIBus *, NICInfo *, int);
803

  
804
static PCINICInitFn pci_nic_init_fns[] = {
805
    pci_ne2000_init,
806
    pci_i82551_init,
807
    pci_i82557b_init,
808
    pci_i82559er_init,
809
    pci_rtl8139_init,
810
    pci_e1000_init,
811
    pci_pcnet_init,
812
    virtio_net_init,
802
static const char * const pci_nic_names[] = {
803
    "ne2k_pci",
804
    "i82551",
805
    "i82557b",
806
    "i82559er",
807
    "rtl8139",
808
    "e1000",
809
    "pcnet",
810
    "virtio_net",
813 811
    NULL
814 812
};
815 813

  
......
817 815
PCIDevice *pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn,
818 816
                  const char *default_model)
819 817
{
820
    PCIDevice *pci_dev;
818
    DeviceState *dev;
821 819
    int i;
822 820

  
823 821
    qemu_check_nic_model_list(nd, pci_nic_models, default_model);
824 822

  
825
    for (i = 0; pci_nic_models[i]; i++)
823
    for (i = 0; pci_nic_models[i]; i++) {
826 824
        if (strcmp(nd->model, pci_nic_models[i]) == 0) {
827
            pci_dev = pci_nic_init_fns[i](bus, nd, devfn);
828
            if (pci_dev)
829
                nd->private = pci_dev;
830
            return pci_dev;
825
            dev = qdev_create(bus, pci_nic_names[i]);
826
            qdev_set_prop_int(dev, "devfn", devfn);
827
            qdev_set_netdev(dev, nd);
828
            qdev_init(dev);
829
            nd->private = dev;
830
            return (PCIDevice *)dev;
831 831
        }
832
    }
832 833

  
833 834
    return NULL;
834 835
}
b/hw/pci.h
239 239
/* usb-ohci.c */
240 240
void usb_ohci_init_pci(struct PCIBus *bus, int num_ports, int devfn);
241 241

  
242
/* eepro100.c */
243

  
244
PCIDevice *pci_i82551_init(PCIBus *bus, NICInfo *nd, int devfn);
245
PCIDevice *pci_i82557b_init(PCIBus *bus, NICInfo *nd, int devfn);
246
PCIDevice *pci_i82559er_init(PCIBus *bus, NICInfo *nd, int devfn);
247

  
248
/* ne2000.c */
249

  
250
PCIDevice *pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn);
251

  
252
/* rtl8139.c */
253

  
254
PCIDevice *pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn);
255

  
256
/* e1000.c */
257
PCIDevice *pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn);
258

  
259
/* pcnet.c */
260
PCIDevice *pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn);
261

  
262 242
/* prep_pci.c */
263 243
PCIBus *pci_prep_init(qemu_irq *pic);
264 244

  
b/hw/pcnet.c
35 35
 * http://www.ibiblio.org/pub/historic-linux/early-ports/Sparc/NCR/NCR92C990.txt
36 36
 */
37 37

  
38
#include "hw.h"
38
#include "sysbus.h"
39 39
#include "pci.h"
40 40
#include "net.h"
41 41
#include "qemu-timer.h"
......
60 60
typedef struct PCNetState_st PCNetState;
61 61

  
62 62
struct PCNetState_st {
63
    PCIDevice dev;
64 63
    PCIDevice *pci_dev;
65 64
    VLANClientState *vc;
66
    NICInfo *nd;
65
    uint8_t macaddr[6];
67 66
    QEMUTimer *poll_timer;
68
    int mmio_index, rap, isr, lnkst;
67
    int rap, isr, lnkst;
69 68
    uint32_t rdra, tdra;
70 69
    uint8_t prom[16];
71 70
    uint16_t csr[128];
72 71
    uint16_t bcr[32];
73 72
    uint64_t timer;
74
    int xmit_pos, recv_pos;
73
    int mmio_index, xmit_pos, recv_pos;
75 74
    uint8_t buffer[4096];
76 75
    int tx_busy;
77 76
    qemu_irq irq;
78
    qemu_irq *reset_irq;
79 77
    void (*phys_mem_read)(void *dma_opaque, target_phys_addr_t addr,
80 78
                         uint8_t *buf, int len, int do_bswap);
81 79
    void (*phys_mem_write)(void *dma_opaque, target_phys_addr_t addr,
......
84 82
    int looptest;
85 83
};
86 84

  
85
typedef struct {
86
    PCIDevice pci_dev;
87
    PCNetState state;
88
} PCIPCNetState;
89

  
90
typedef struct {
91
    SysBusDevice busdev;
92
    PCNetState state;
93
} SysBusPCNetState;
94

  
87 95
struct qemu_ether_header {
88 96
    uint8_t ether_dhost[6];
89 97
    uint8_t ether_shost[6];
......
1593 1601

  
1594 1602
    /* Initialize the PROM */
1595 1603

  
1596
    if (s->nd)
1597
        memcpy(s->prom, s->nd->macaddr, 6);
1604
    memcpy(s->prom, s->macaddr, 6);
1598 1605
    s->prom[12] = s->prom[13] = 0x00;
1599 1606
    s->prom[14] = s->prom[15] = 0x57;
1600 1607

  
......
1754 1761
static void pcnet_ioport_map(PCIDevice *pci_dev, int region_num,
1755 1762
                             uint32_t addr, uint32_t size, int type)
1756 1763
{
1757
    PCNetState *d = (PCNetState *)pci_dev;
1764
    PCNetState *d = &((PCIPCNetState *)pci_dev)->state;
1758 1765

  
1759 1766
#ifdef PCNET_DEBUG_IO
1760 1767
    printf("pcnet_ioport_map addr=0x%04x size=0x%04x\n", addr, size);
......
1938 1945
    qemu_free_timer(d->poll_timer);
1939 1946
}
1940 1947

  
1941
static void pcnet_common_init(PCNetState *d, NICInfo *nd, NetCleanup *cleanup)
1948
static void pcnet_common_init(DeviceState *dev, PCNetState *s,
1949
                              NetCleanup *cleanup)
1942 1950
{
1943
    d->poll_timer = qemu_new_timer(vm_clock, pcnet_poll_timer, d);
1944

  
1945
    d->nd = nd;
1946

  
1947
    if (nd && nd->vlan) {
1948
        d->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name,
1949
                                     pcnet_receive, pcnet_can_receive,
1950
                                     cleanup, d);
1951

  
1952
        qemu_format_nic_info_str(d->vc, d->nd->macaddr);
1953
    } else {
1954
        d->vc = NULL;
1955
    }
1956
    pcnet_h_reset(d);
1957
    register_savevm("pcnet", -1, 2, pcnet_save, pcnet_load, d);
1951
    s->poll_timer = qemu_new_timer(vm_clock, pcnet_poll_timer, s);
1952

  
1953
    qdev_get_macaddr(dev, s->macaddr);
1954
    s->vc = qdev_get_vlan_client(dev,
1955
                                 pcnet_receive, pcnet_can_receive,
1956
                                 cleanup, s);
1957
    pcnet_h_reset(s);
1958
    register_savevm("pcnet", -1, 2, pcnet_save, pcnet_load, s);
1958 1959
}
1959 1960

  
1960 1961
/* PCI interface */
......
1974 1975
static void pcnet_mmio_map(PCIDevice *pci_dev, int region_num,
1975 1976
                            uint32_t addr, uint32_t size, int type)
1976 1977
{
1977
    PCNetState *d = (PCNetState *)pci_dev;
1978
    PCIPCNetState *d = (PCIPCNetState *)pci_dev;
1978 1979

  
1979 1980
#ifdef PCNET_DEBUG_IO
1980 1981
    printf("pcnet_mmio_map addr=0x%08x 0x%08x\n", addr, size);
1981 1982
#endif
1982 1983

  
1983
    cpu_register_physical_memory(addr, PCNET_PNPMMIO_SIZE, d->mmio_index);
1984
    cpu_register_physical_memory(addr, PCNET_PNPMMIO_SIZE, d->state.mmio_index);
1984 1985
}
1985 1986

  
1986 1987
static void pci_physical_memory_write(void *dma_opaque, target_phys_addr_t addr,
......
2004 2005

  
2005 2006
static int pci_pcnet_uninit(PCIDevice *dev)
2006 2007
{
2007
    PCNetState *d = (PCNetState *)dev;
2008
    PCIPCNetState *d = (PCIPCNetState *)dev;
2008 2009

  
2009
    cpu_unregister_io_memory(d->mmio_index);
2010
    cpu_unregister_io_memory(d->state.mmio_index);
2010 2011

  
2011 2012
    return 0;
2012 2013
}
2013 2014

  
2014
PCIDevice *pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn)
2015
static void pci_pcnet_init(PCIDevice *pci_dev)
2015 2016
{
2016
    PCNetState *d;
2017
    PCIPCNetState *d = (PCIPCNetState *)pci_dev;
2018
    PCNetState *s = &d->state;
2017 2019
    uint8_t *pci_conf;
2018 2020

  
2019 2021
#if 0
......
2021 2023
        sizeof(struct pcnet_RMD), sizeof(struct pcnet_TMD));
2022 2024
#endif
2023 2025

  
2024
    d = (PCNetState *)pci_register_device(bus, "PCNet", sizeof(PCNetState),
2025
                                          devfn, NULL, NULL);
2026
    if (!d)
2027
	return NULL;
2028

  
2029
    d->dev.unregister = pci_pcnet_uninit;
2026
    pci_dev->unregister = pci_pcnet_uninit;
2030 2027

  
2031
    pci_conf = d->dev.config;
2028
    pci_conf = pci_dev->config;
2032 2029

  
2033 2030
    pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_AMD);
2034 2031
    pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_AMD_LANCE);
......
2047 2044
    pci_conf[0x3f] = 0xff;
2048 2045

  
2049 2046
    /* Handler for memory-mapped I/O */
2050
    d->mmio_index =
2051
      cpu_register_io_memory(0, pcnet_mmio_read, pcnet_mmio_write, d);
2047
    s->mmio_index =
2048
      cpu_register_io_memory(0, pcnet_mmio_read, pcnet_mmio_write, &d->state);
2052 2049

  
2053 2050
    pci_register_io_region((PCIDevice *)d, 0, PCNET_IOPORT_SIZE,
2054 2051
                           PCI_ADDRESS_SPACE_IO, pcnet_ioport_map);
......
2056 2053
    pci_register_io_region((PCIDevice *)d, 1, PCNET_PNPMMIO_SIZE,
2057 2054
                           PCI_ADDRESS_SPACE_MEM, pcnet_mmio_map);
2058 2055

  
2059
    d->irq = d->dev.irq[0];
2060
    d->phys_mem_read = pci_physical_memory_read;
2061
    d->phys_mem_write = pci_physical_memory_write;
2062
    d->pci_dev = &d->dev;
2056
    s->irq = pci_dev->irq[0];
2057
    s->phys_mem_read = pci_physical_memory_read;
2058
    s->phys_mem_write = pci_physical_memory_write;
2059
    s->pci_dev = pci_dev;
2063 2060

  
2064
    pcnet_common_init(d, nd, pci_pcnet_cleanup);
2065

  
2066
    return (PCIDevice *)d;
2061
    pcnet_common_init(&pci_dev->qdev, s, pci_pcnet_cleanup);
2067 2062
}
2068 2063

  
2069 2064
/* SPARC32 interface */
......
2117 2112
    PCNetState *d = vc->opaque;
2118 2113

  
2119 2114
    pcnet_common_cleanup(d);
2120

  
2121
    qemu_free_irqs(d->reset_irq);
2122

  
2123
    cpu_unregister_io_memory(d->mmio_index);
2124

  
2125
    qemu_free(d);
2126 2115
}
2127 2116

  
2128
void lance_init(NICInfo *nd, target_phys_addr_t leaddr, void *dma_opaque,
2129
                qemu_irq irq, qemu_irq *reset)
2117
static void lance_init(SysBusDevice *dev)
2130 2118
{
2131
    PCNetState *d;
2132

  
2133
    qemu_check_nic_model(nd, "lance");
2119
    SysBusPCNetState *d = FROM_SYSBUS(SysBusPCNetState, dev);
2120
    PCNetState *s = &d->state;
2134 2121

  
2135
    d = qemu_mallocz(sizeof(PCNetState));
2136

  
2137
    d->mmio_index =
2122
    s->mmio_index =
2138 2123
        cpu_register_io_memory(0, lance_mem_read, lance_mem_write, d);
2139 2124

  
2140
    d->dma_opaque = dma_opaque;
2125
    s->dma_opaque = qdev_get_prop_ptr(&dev->qdev, "dma");
2126

  
2127
    qdev_init_irq_sink(&dev->qdev, parent_lance_reset, 1);
2141 2128

  
2142
    d->reset_irq = qemu_allocate_irqs(parent_lance_reset, d, 1);
2143
    *reset = *d->reset_irq;
2129
    sysbus_init_mmio(dev, 4, s->mmio_index);
2144 2130

  
2145
    cpu_register_physical_memory(leaddr, 4, d->mmio_index);
2131
    sysbus_init_irq(dev, &s->irq);
2146 2132

  
2147
    d->irq = irq;
2148
    d->phys_mem_read = ledma_memory_read;
2149
    d->phys_mem_write = ledma_memory_write;
2133
    s->phys_mem_read = ledma_memory_read;
2134
    s->phys_mem_write = ledma_memory_write;
2150 2135

  
2151
    pcnet_common_init(d, nd, lance_cleanup);
2136
    pcnet_common_init(&dev->qdev, s, lance_cleanup);
2152 2137
}
2153 2138
#endif /* TARGET_SPARC */
2139

  
2140
static void pcnet_register_devices(void)
2141
{
2142
    pci_qdev_register("pcnet", sizeof(PCIPCNetState), pci_pcnet_init);
2143
#if defined (TARGET_SPARC) && !defined(TARGET_SPARC64)
2144
    sysbus_register_dev("lance", sizeof(SysBusPCNetState), lance_init);
2145
#endif
2146
}
2147

  
2148
device_init(pcnet_register_devices)
b/hw/qdev.c
26 26
   inherit from a particular bus (e.g. PCI or I2C) rather than
27 27
   this API directly.  */
28 28

  
29
#include "net.h"
29 30
#include "qdev.h"
30 31
#include "sysemu.h"
31 32

  
......
135 136
    prop->value.ptr = value;
136 137
}
137 138

  
139
void qdev_set_netdev(DeviceState *dev, NICInfo *nd)
140
{
141
    assert(!dev->nd);
142
    dev->nd = nd;
143
}
144

  
138 145

  
139 146
qemu_irq qdev_get_irq_sink(DeviceState *dev, int n)
140 147
{
......
225 232
    dev->gpio_out[n] = pin;
226 233
}
227 234

  
235
VLANClientState *qdev_get_vlan_client(DeviceState *dev,
236
                                      IOReadHandler *fd_read,
237
                                      IOCanRWHandler *fd_can_read,
238
                                      NetCleanup *cleanup,
239
                                      void *opaque)
240
{
241
    NICInfo *nd = dev->nd;
242
    assert(nd);
243
    return qemu_new_vlan_client(nd->vlan, nd->model, nd->name,
244
                                fd_read, fd_can_read, cleanup, opaque);
245
}
246

  
247

  
248
void qdev_get_macaddr(DeviceState *dev, uint8_t *macaddr)
249
{
250
    memcpy(macaddr, dev->nd->macaddr, 6);
251
}
252

  
228 253
static int next_block_unit[IF_COUNT];
229 254

  
230 255
/* Get a block device.  This should only be used for single-drive devices
b/hw/qdev.h
24 24
    int num_gpio_in;
25 25
    qemu_irq *gpio_in;
26 26
    ChildBusList *child_bus;
27
    NICInfo *nd;
27 28
};
28 29

  
29 30
/*** Board API.  This should go away once we have a machine config file.  ***/
......
34 35
/* Set properties between creation and init.  */
35 36
void qdev_set_prop_int(DeviceState *dev, const char *name, int value);
36 37
void qdev_set_prop_ptr(DeviceState *dev, const char *name, void *value);
38
void qdev_set_netdev(DeviceState *dev, NICInfo *nd);
37 39

  
38 40
qemu_irq qdev_get_irq_sink(DeviceState *dev, int n);
39 41
qemu_irq qdev_get_gpio_in(DeviceState *dev, int n);
b/hw/rtl8139.c
3441 3441
    return 0;
3442 3442
}
3443 3443

  
3444
PCIDevice *pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn)
3444
static void pci_rtl8139_init(PCIDevice *dev)
3445 3445
{
3446
    PCIRTL8139State *d;
3446
    PCIRTL8139State *d = (PCIRTL8139State *)dev;
3447 3447
    RTL8139State *s;
3448 3448
    uint8_t *pci_conf;
3449 3449

  
3450
    d = (PCIRTL8139State *)pci_register_device(bus,
3451
                                              "RTL8139", sizeof(PCIRTL8139State),
3452
                                              devfn,
3453
                                              NULL, NULL);
3454
    if (!d)
3455
	return NULL;
3456

  
3457 3450
    d->dev.unregister = pci_rtl8139_uninit;
3458 3451

  
3459 3452
    pci_conf = d->dev.config;
......
3479 3472
                           PCI_ADDRESS_SPACE_MEM, rtl8139_mmio_map);
3480 3473

  
3481 3474
    s->pci_dev = (PCIDevice *)d;
3482
    memcpy(s->macaddr, nd->macaddr, 6);
3475
    qdev_get_macaddr(&dev->qdev, s->macaddr);
3483 3476
    rtl8139_reset(s);
3484
    s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name,
3477
    s->vc = qdev_get_vlan_client(&dev->qdev,
3485 3478
                                 rtl8139_receive, rtl8139_can_receive,
3486 3479
                                 rtl8139_cleanup, s);
3487 3480

  
......
3499 3492
    qemu_mod_timer(s->timer,
3500 3493
        rtl8139_get_next_tctr_time(s,qemu_get_clock(vm_clock)));
3501 3494
#endif /* RTL8139_ONBOARD_TIMER */
3502
    return (PCIDevice *)d;
3503 3495
}
3496

  
3497
static void rtl8139_register_devices(void)
3498
{
3499
    pci_qdev_register("rtl8139", sizeof(PCIRTL8139State), pci_rtl8139_init);
3500
}
3501

  
3502
device_init(rtl8139_register_devices)
b/hw/sun4m.c
21 21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 22
 * THE SOFTWARE.
23 23
 */
24
#include "hw.h"
24
#include "sysbus.h"
25 25
#include "qemu-timer.h"
26 26
#include "sun4m.h"
27 27
#include "nvram.h"
......
364 364
    return kernel_size;
365 365
}
366 366

  
367
static void lance_init(NICInfo *nd, target_phys_addr_t leaddr,
368
                       void *dma_opaque, qemu_irq irq, qemu_irq *reset)
369
{
370
    DeviceState *dev;
371
    SysBusDevice *s;
372

  
373
    qemu_check_nic_model(&nd_table[0], "lance");
374

  
375
    dev = qdev_create(NULL, "lance");
376
    qdev_set_netdev(dev, nd);
377
    qdev_set_prop_ptr(dev, "dma", dma_opaque);
378
    qdev_init(dev);
379
    s = sysbus_from_qdev(dev);
380
    sysbus_mmio_map(s, 0, leaddr);
381
    sysbus_connect_irq(s, 0, irq);
382
    *reset = qdev_get_irq_sink(dev, 0);
383
}
384

  
367 385
static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size,
368 386
                          const char *boot_device,
369 387
                          const char *kernel_filename,
b/hw/sun4m.h
62 62
/* sparc32_dma.c */
63 63
#include "sparc32_dma.h"
64 64

  
65
/* pcnet.c */
66
void lance_init(NICInfo *nd, target_phys_addr_t leaddr, void *dma_opaque,
67
                qemu_irq irq, qemu_irq *reset);
68

  
69 65
/* eccmemctl.c */
70 66
void *ecc_init(target_phys_addr_t base, qemu_irq irq, uint32_t version);
71 67

  
b/net.h
127 127
#define SMBD_COMMAND "/usr/sbin/smbd"
128 128
#endif
129 129

  
130
void qdev_get_macaddr(DeviceState *dev, uint8_t *macaddr);
131
VLANClientState *qdev_get_vlan_client(DeviceState *dev,
132
                                      IOReadHandler *fd_read,
133
                                      IOCanRWHandler *fd_can_read,
134
                                      NetCleanup *cleanup,
135
                                      void *opaque);
136

  
130 137
#endif

Also available in: Unified diff