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