Commit 32c86e95b258515099d04f9eff48efc57a469bf7
1 parent
98ba2632
Register reset functions for e1000 and rtl8139
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Showing
2 changed files
with
17 additions
and
8 deletions
hw/e1000.c
... | ... | @@ -1058,6 +1058,18 @@ pci_e1000_uninit(PCIDevice *dev) |
1058 | 1058 | return 0; |
1059 | 1059 | } |
1060 | 1060 | |
1061 | +static void e1000_reset(void *opaque) | |
1062 | +{ | |
1063 | + E1000State *d = opaque; | |
1064 | + | |
1065 | + memset(d->phy_reg, 0, sizeof d->phy_reg); | |
1066 | + memmove(d->phy_reg, phy_reg_init, sizeof phy_reg_init); | |
1067 | + memset(d->mac_reg, 0, sizeof d->mac_reg); | |
1068 | + memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init); | |
1069 | + d->rxbuf_min_shift = 1; | |
1070 | + memset(&d->tx, 0, sizeof d->tx); | |
1071 | +} | |
1072 | + | |
1061 | 1073 | static void pci_e1000_init(PCIDevice *pci_dev) |
1062 | 1074 | { |
1063 | 1075 | E1000State *d = (E1000State *)pci_dev; |
... | ... | @@ -1098,13 +1110,6 @@ static void pci_e1000_init(PCIDevice *pci_dev) |
1098 | 1110 | checksum = (uint16_t) EEPROM_SUM - checksum; |
1099 | 1111 | d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum; |
1100 | 1112 | |
1101 | - memset(d->phy_reg, 0, sizeof d->phy_reg); | |
1102 | - memmove(d->phy_reg, phy_reg_init, sizeof phy_reg_init); | |
1103 | - memset(d->mac_reg, 0, sizeof d->mac_reg); | |
1104 | - memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init); | |
1105 | - d->rxbuf_min_shift = 1; | |
1106 | - memset(&d->tx, 0, sizeof d->tx); | |
1107 | - | |
1108 | 1113 | d->vc = qdev_get_vlan_client(&d->dev.qdev, |
1109 | 1114 | e1000_receive, e1000_can_receive, |
1110 | 1115 | e1000_cleanup, d); |
... | ... | @@ -1114,6 +1119,8 @@ static void pci_e1000_init(PCIDevice *pci_dev) |
1114 | 1119 | |
1115 | 1120 | register_savevm(info_str, -1, 2, nic_save, nic_load, d); |
1116 | 1121 | d->dev.unregister = pci_e1000_uninit; |
1122 | + qemu_register_reset(e1000_reset, 0, d); | |
1123 | + e1000_reset(d); | |
1117 | 1124 | } |
1118 | 1125 | |
1119 | 1126 | static void e1000_register_devices(void) | ... | ... |
hw/rtl8139.c
... | ... | @@ -1170,8 +1170,9 @@ static void rtl8139_reset_rxring(RTL8139State *s, uint32_t bufferSize) |
1170 | 1170 | s->RxBufAddr = 0; |
1171 | 1171 | } |
1172 | 1172 | |
1173 | -static void rtl8139_reset(RTL8139State *s) | |
1173 | +static void rtl8139_reset(void *opaque) | |
1174 | 1174 | { |
1175 | + RTL8139State *s = opaque; | |
1175 | 1176 | int i; |
1176 | 1177 | |
1177 | 1178 | /* restore MAC address */ |
... | ... | @@ -3473,6 +3474,7 @@ static void pci_rtl8139_init(PCIDevice *dev) |
3473 | 3474 | |
3474 | 3475 | s->pci_dev = (PCIDevice *)d; |
3475 | 3476 | qdev_get_macaddr(&dev->qdev, s->macaddr); |
3477 | + qemu_register_reset(rtl8139_reset, 0, s); | |
3476 | 3478 | rtl8139_reset(s); |
3477 | 3479 | s->vc = qdev_get_vlan_client(&dev->qdev, |
3478 | 3480 | rtl8139_receive, rtl8139_can_receive, | ... | ... |