Revision 3706c43f
b/hw/eepro100.c | ||
---|---|---|
191 | 191 |
|
192 | 192 |
typedef struct { |
193 | 193 |
PCIDevice dev; |
194 |
#if 1 |
|
195 |
uint8_t cmd; |
|
196 |
uint32_t start; |
|
197 |
uint32_t stop; |
|
198 |
uint8_t boundary; |
|
199 |
uint8_t tsr; |
|
200 |
uint8_t tpsr; |
|
201 |
uint16_t tcnt; |
|
202 |
uint16_t rcnt; |
|
203 |
uint32_t rsar; |
|
204 |
uint8_t rsr; |
|
205 |
uint8_t rxcr; |
|
206 |
uint8_t isr; |
|
207 |
uint8_t dcfg; |
|
208 |
uint8_t imr; |
|
209 |
uint8_t phys[6]; /* mac address */ |
|
210 |
uint8_t curpag; |
|
211 | 194 |
uint8_t mult[8]; /* multicast mask array */ |
212 | 195 |
int mmio_index; |
213 | 196 |
VLANClientState *vc; |
214 |
#endif |
|
215 | 197 |
uint8_t scb_stat; /* SCB stat/ack byte */ |
216 | 198 |
uint8_t int_stat; /* PCI interrupt status */ |
199 |
/* region must not be saved by nic_save. */ |
|
217 | 200 |
uint32_t region[3]; /* PCI region addresses */ |
218 | 201 |
uint8_t macaddr[6]; |
219 |
uint32_t statcounter[19]; |
|
220 | 202 |
uint16_t mdimem[32]; |
221 | 203 |
eeprom_t *eeprom; |
222 | 204 |
uint32_t device; /* device variant */ |
... | ... | |
1618 | 1600 |
if (version_id > 3) |
1619 | 1601 |
return -EINVAL; |
1620 | 1602 |
|
1621 |
if (version_id >= 3) { |
|
1622 |
ret = pci_device_load(&s->dev, f); |
|
1623 |
if (ret < 0) |
|
1624 |
return ret; |
|
1603 |
ret = pci_device_load(&s->dev, f); |
|
1604 |
if (ret < 0) { |
|
1605 |
return ret; |
|
1625 | 1606 |
} |
1626 | 1607 |
|
1627 |
if (version_id >= 2) { |
|
1628 |
qemu_get_8s(f, &s->rxcr); |
|
1629 |
} else { |
|
1630 |
s->rxcr = 0x0c; |
|
1631 |
} |
|
1608 |
/* Skip unused entries. */ |
|
1609 |
qemu_fseek(f, 32, SEEK_CUR); |
|
1632 | 1610 |
|
1633 |
qemu_get_8s(f, &s->cmd); |
|
1634 |
qemu_get_be32s(f, &s->start); |
|
1635 |
qemu_get_be32s(f, &s->stop); |
|
1636 |
qemu_get_8s(f, &s->boundary); |
|
1637 |
qemu_get_8s(f, &s->tsr); |
|
1638 |
qemu_get_8s(f, &s->tpsr); |
|
1639 |
qemu_get_be16s(f, &s->tcnt); |
|
1640 |
qemu_get_be16s(f, &s->rcnt); |
|
1641 |
qemu_get_be32s(f, &s->rsar); |
|
1642 |
qemu_get_8s(f, &s->rsr); |
|
1643 |
qemu_get_8s(f, &s->isr); |
|
1644 |
qemu_get_8s(f, &s->dcfg); |
|
1645 |
qemu_get_8s(f, &s->imr); |
|
1646 |
qemu_get_buffer(f, s->phys, 6); |
|
1647 |
qemu_get_8s(f, &s->curpag); |
|
1648 | 1611 |
qemu_get_buffer(f, s->mult, 8); |
1649 | 1612 |
qemu_get_buffer(f, s->mem, sizeof(s->mem)); |
1650 | 1613 |
|
1651 |
/* Restore all members of struct between scv_stat and mem. */
|
|
1614 |
/* Restore all members of struct between scb_stat and mem. */
|
|
1652 | 1615 |
qemu_get_8s(f, &s->scb_stat); |
1653 | 1616 |
qemu_get_8s(f, &s->int_stat); |
1654 |
for (i = 0; i < 3; i++) { |
|
1655 |
qemu_get_be32s(f, &s->region[i]); |
|
1656 |
} |
|
1617 |
/* Skip unused entries. */ |
|
1618 |
qemu_fseek(f, 3 * 4, SEEK_CUR); |
|
1657 | 1619 |
qemu_get_buffer(f, s->macaddr, 6); |
1658 |
for (i = 0; i < 19; i++) { |
|
1659 |
qemu_get_be32s(f, &s->statcounter[i]); |
|
1660 |
} |
|
1620 |
/* Skip unused entries. */ |
|
1621 |
qemu_fseek(f, 19 * 4, SEEK_CUR); |
|
1661 | 1622 |
for (i = 0; i < 32; i++) { |
1662 | 1623 |
qemu_get_be16s(f, &s->mdimem[i]); |
1663 | 1624 |
} |
1664 | 1625 |
/* The eeprom should be saved and restored by its own routines. */ |
1665 | 1626 |
qemu_get_be32s(f, &s->device); |
1627 |
// TODO check device. |
|
1666 | 1628 |
qemu_get_be32s(f, &s->pointer); |
1667 | 1629 |
qemu_get_be32s(f, &s->cu_base); |
1668 | 1630 |
qemu_get_be32s(f, &s->cu_offset); |
... | ... | |
1709 | 1671 |
|
1710 | 1672 |
pci_device_save(&s->dev, f); |
1711 | 1673 |
|
1712 |
qemu_put_8s(f, &s->rxcr); |
|
1713 |
|
|
1714 |
qemu_put_8s(f, &s->cmd); |
|
1715 |
qemu_put_be32s(f, &s->start); |
|
1716 |
qemu_put_be32s(f, &s->stop); |
|
1717 |
qemu_put_8s(f, &s->boundary); |
|
1718 |
qemu_put_8s(f, &s->tsr); |
|
1719 |
qemu_put_8s(f, &s->tpsr); |
|
1720 |
qemu_put_be16s(f, &s->tcnt); |
|
1721 |
qemu_put_be16s(f, &s->rcnt); |
|
1722 |
qemu_put_be32s(f, &s->rsar); |
|
1723 |
qemu_put_8s(f, &s->rsr); |
|
1724 |
qemu_put_8s(f, &s->isr); |
|
1725 |
qemu_put_8s(f, &s->dcfg); |
|
1726 |
qemu_put_8s(f, &s->imr); |
|
1727 |
qemu_put_buffer(f, s->phys, 6); |
|
1728 |
qemu_put_8s(f, &s->curpag); |
|
1674 |
/* Skip unused entries. */ |
|
1675 |
qemu_fseek(f, 32, SEEK_CUR); |
|
1676 |
|
|
1729 | 1677 |
qemu_put_buffer(f, s->mult, 8); |
1730 | 1678 |
qemu_put_buffer(f, s->mem, sizeof(s->mem)); |
1731 | 1679 |
|
1732 |
/* Save all members of struct between scv_stat and mem. */
|
|
1680 |
/* Save all members of struct between scb_stat and mem. */
|
|
1733 | 1681 |
qemu_put_8s(f, &s->scb_stat); |
1734 | 1682 |
qemu_put_8s(f, &s->int_stat); |
1735 |
for (i = 0; i < 3; i++) { |
|
1736 |
qemu_put_be32s(f, &s->region[i]); |
|
1737 |
} |
|
1683 |
/* Skip unused entries. */ |
|
1684 |
qemu_fseek(f, 3 * 4, SEEK_CUR); |
|
1738 | 1685 |
qemu_put_buffer(f, s->macaddr, 6); |
1739 |
for (i = 0; i < 19; i++) { |
|
1740 |
qemu_put_be32s(f, &s->statcounter[i]); |
|
1741 |
} |
|
1686 |
/* Skip unused entries. */ |
|
1687 |
qemu_fseek(f, 19 * 4, SEEK_CUR); |
|
1742 | 1688 |
for (i = 0; i < 32; i++) { |
1743 | 1689 |
qemu_put_be16s(f, &s->mdimem[i]); |
1744 | 1690 |
} |
Also available in: Unified diff