Commit 32c86e95b258515099d04f9eff48efc57a469bf7

Authored by Blue Swirl
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,6 +1058,18 @@ pci_e1000_uninit(PCIDevice *dev)
1058 return 0; 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 static void pci_e1000_init(PCIDevice *pci_dev) 1073 static void pci_e1000_init(PCIDevice *pci_dev)
1062 { 1074 {
1063 E1000State *d = (E1000State *)pci_dev; 1075 E1000State *d = (E1000State *)pci_dev;
@@ -1098,13 +1110,6 @@ static void pci_e1000_init(PCIDevice *pci_dev) @@ -1098,13 +1110,6 @@ static void pci_e1000_init(PCIDevice *pci_dev)
1098 checksum = (uint16_t) EEPROM_SUM - checksum; 1110 checksum = (uint16_t) EEPROM_SUM - checksum;
1099 d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum; 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 d->vc = qdev_get_vlan_client(&d->dev.qdev, 1113 d->vc = qdev_get_vlan_client(&d->dev.qdev,
1109 e1000_receive, e1000_can_receive, 1114 e1000_receive, e1000_can_receive,
1110 e1000_cleanup, d); 1115 e1000_cleanup, d);
@@ -1114,6 +1119,8 @@ static void pci_e1000_init(PCIDevice *pci_dev) @@ -1114,6 +1119,8 @@ static void pci_e1000_init(PCIDevice *pci_dev)
1114 1119
1115 register_savevm(info_str, -1, 2, nic_save, nic_load, d); 1120 register_savevm(info_str, -1, 2, nic_save, nic_load, d);
1116 d->dev.unregister = pci_e1000_uninit; 1121 d->dev.unregister = pci_e1000_uninit;
  1122 + qemu_register_reset(e1000_reset, 0, d);
  1123 + e1000_reset(d);
1117 } 1124 }
1118 1125
1119 static void e1000_register_devices(void) 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,8 +1170,9 @@ static void rtl8139_reset_rxring(RTL8139State *s, uint32_t bufferSize)
1170 s->RxBufAddr = 0; 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 int i; 1176 int i;
1176 1177
1177 /* restore MAC address */ 1178 /* restore MAC address */
@@ -3473,6 +3474,7 @@ static void pci_rtl8139_init(PCIDevice *dev) @@ -3473,6 +3474,7 @@ static void pci_rtl8139_init(PCIDevice *dev)
3473 3474
3474 s->pci_dev = (PCIDevice *)d; 3475 s->pci_dev = (PCIDevice *)d;
3475 qdev_get_macaddr(&dev->qdev, s->macaddr); 3476 qdev_get_macaddr(&dev->qdev, s->macaddr);
  3477 + qemu_register_reset(rtl8139_reset, 0, s);
3476 rtl8139_reset(s); 3478 rtl8139_reset(s);
3477 s->vc = qdev_get_vlan_client(&dev->qdev, 3479 s->vc = qdev_get_vlan_client(&dev->qdev,
3478 rtl8139_receive, rtl8139_can_receive, 3480 rtl8139_receive, rtl8139_can_receive,