Revision fbdaa002 hw/e1000.c

b/hw/e1000.c
25 25
#include "hw.h"
26 26
#include "pci.h"
27 27
#include "net.h"
28
#include "loader.h"
28 29

  
29 30
#include "e1000_hw.h"
30 31

  
......
74 75
typedef struct E1000State_st {
75 76
    PCIDevice dev;
76 77
    VLANClientState *vc;
78
    NICConf conf;
77 79
    int mmio_index;
78 80

  
79 81
    uint32_t mac_reg[0x8000];
......
1056 1058
{
1057 1059
    E1000State *d = vc->opaque;
1058 1060

  
1059
    unregister_savevm("e1000", d);
1061
    d->vc = NULL;
1060 1062
}
1061 1063

  
1062 1064
static int
......
1065 1067
    E1000State *d = DO_UPCAST(E1000State, dev, dev);
1066 1068

  
1067 1069
    cpu_unregister_io_memory(d->mmio_index);
1068

  
1070
    qemu_del_vlan_client(d->vc);
1071
    unregister_savevm("e1000", d);
1069 1072
    return 0;
1070 1073
}
1071 1074

  
......
1088 1091
    uint16_t checksum = 0;
1089 1092
    static const char info_str[] = "e1000";
1090 1093
    int i;
1091
    uint8_t macaddr[6];
1094
    uint8_t *macaddr;
1092 1095

  
1093 1096
    pci_conf = d->dev.config;
1094 1097

  
......
1113 1116

  
1114 1117
    memmove(d->eeprom_data, e1000_eeprom_template,
1115 1118
        sizeof e1000_eeprom_template);
1116
    qdev_get_macaddr(&d->dev.qdev, macaddr);
1119
    qemu_macaddr_default_if_unset(&d->conf.macaddr);
1120
    macaddr = d->conf.macaddr.a;
1117 1121
    for (i = 0; i < 3; i++)
1118 1122
        d->eeprom_data[i] = (macaddr[2*i+1]<<8) | macaddr[2*i];
1119 1123
    for (i = 0; i < EEPROM_CHECKSUM_REG; i++)
......
1121 1125
    checksum = (uint16_t) EEPROM_SUM - checksum;
1122 1126
    d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum;
1123 1127

  
1124
    d->vc = qdev_get_vlan_client(&d->dev.qdev,
1125
                                 e1000_can_receive, e1000_receive,
1128
    d->vc = qemu_new_vlan_client(NET_CLIENT_TYPE_NIC,
1129
                                 d->conf.vlan, d->conf.peer,
1130
                                 d->dev.qdev.info->name, d->dev.qdev.id,
1131
                                 e1000_can_receive, e1000_receive, NULL,
1126 1132
                                 NULL, e1000_cleanup, d);
1127 1133
    d->vc->link_status_changed = e1000_set_link_status;
1128 1134

  
1129 1135
    qemu_format_nic_info_str(d->vc, macaddr);
1130 1136

  
1131 1137
    register_savevm(info_str, -1, 2, nic_save, nic_load, d);
1132
    qemu_register_reset(e1000_reset, d);
1133 1138
    e1000_reset(d);
1139

  
1140
#if 0 /* rom bev support is broken -> can't load unconditionally */
1141
    if (!pci_dev->qdev.hotplugged) {
1142
        static int loaded = 0;
1143
        if (!loaded) {
1144
            rom_add_option("pxe-e1000.bin");
1145
            loaded = 1;
1146
        }
1147
    }
1148
#endif
1134 1149
    return 0;
1135 1150
}
1136 1151

  
1152
static void qdev_e1000_reset(DeviceState *dev)
1153
{
1154
    E1000State *d = DO_UPCAST(E1000State, dev.qdev, dev);
1155
    e1000_reset(d);
1156
}
1157

  
1137 1158
static PCIDeviceInfo e1000_info = {
1138
    .qdev.name = "e1000",
1139
    .qdev.size = sizeof(E1000State),
1140
    .init      = pci_e1000_init,
1141
    .exit      = pci_e1000_uninit,
1159
    .qdev.name  = "e1000",
1160
    .qdev.desc  = "Intel Gigabit Ethernet",
1161
    .qdev.size  = sizeof(E1000State),
1162
    .qdev.reset = qdev_e1000_reset,
1163
    .init       = pci_e1000_init,
1164
    .exit       = pci_e1000_uninit,
1165
    .qdev.props = (Property[]) {
1166
        DEFINE_NIC_PROPERTIES(E1000State, conf),
1167
        DEFINE_PROP_END_OF_LIST(),
1168
    }
1142 1169
};
1143 1170

  
1144 1171
static void e1000_register_devices(void)

Also available in: Unified diff