|
@@ -69,7 +69,7 @@ struct PCNetState_st {
|
|
uint16_t csr[128];
|
|
uint16_t csr[128];
|
|
uint16_t bcr[32];
|
|
uint16_t bcr[32];
|
|
uint64_t timer;
|
|
uint64_t timer;
|
|
- int mmio_index, xmit_pos, recv_pos;
|
|
|
|
|
|
+ int mmio_index, xmit_pos;
|
|
uint8_t buffer[4096];
|
|
uint8_t buffer[4096];
|
|
int tx_busy;
|
|
int tx_busy;
|
|
qemu_irq irq;
|
|
qemu_irq irq;
|
|
@@ -1067,9 +1067,6 @@ static int pcnet_can_receive(VLANClientState *vc)
|
|
if (CSR_STOP(s) || CSR_SPND(s))
|
|
if (CSR_STOP(s) || CSR_SPND(s))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if (s->recv_pos > 0)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
return sizeof(s->buffer)-16;
|
|
return sizeof(s->buffer)-16;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1896,7 +1893,6 @@ static void pcnet_save(QEMUFile *f, void *opaque)
|
|
qemu_put_be16s(f, &s->bcr[i]);
|
|
qemu_put_be16s(f, &s->bcr[i]);
|
|
qemu_put_be64s(f, &s->timer);
|
|
qemu_put_be64s(f, &s->timer);
|
|
qemu_put_sbe32(f, s->xmit_pos);
|
|
qemu_put_sbe32(f, s->xmit_pos);
|
|
- qemu_put_sbe32(f, s->recv_pos);
|
|
|
|
qemu_put_buffer(f, s->buffer, 4096);
|
|
qemu_put_buffer(f, s->buffer, 4096);
|
|
qemu_put_sbe32(f, s->tx_busy);
|
|
qemu_put_sbe32(f, s->tx_busy);
|
|
qemu_put_timer(f, s->poll_timer);
|
|
qemu_put_timer(f, s->poll_timer);
|
|
@@ -1905,9 +1901,9 @@ static void pcnet_save(QEMUFile *f, void *opaque)
|
|
static int pcnet_load(QEMUFile *f, void *opaque, int version_id)
|
|
static int pcnet_load(QEMUFile *f, void *opaque, int version_id)
|
|
{
|
|
{
|
|
PCNetState *s = opaque;
|
|
PCNetState *s = opaque;
|
|
- int i;
|
|
|
|
|
|
+ int i, dummy;
|
|
|
|
|
|
- if (version_id != 2)
|
|
|
|
|
|
+ if (version_id < 2 || version_id > 3)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
qemu_get_sbe32s(f, &s->rap);
|
|
qemu_get_sbe32s(f, &s->rap);
|
|
@@ -1922,7 +1918,9 @@ static int pcnet_load(QEMUFile *f, void *opaque, int version_id)
|
|
qemu_get_be16s(f, &s->bcr[i]);
|
|
qemu_get_be16s(f, &s->bcr[i]);
|
|
qemu_get_be64s(f, &s->timer);
|
|
qemu_get_be64s(f, &s->timer);
|
|
qemu_get_sbe32s(f, &s->xmit_pos);
|
|
qemu_get_sbe32s(f, &s->xmit_pos);
|
|
- qemu_get_sbe32s(f, &s->recv_pos);
|
|
|
|
|
|
+ if (version_id == 2) {
|
|
|
|
+ qemu_get_sbe32s(f, &dummy);
|
|
|
|
+ }
|
|
qemu_get_buffer(f, s->buffer, 4096);
|
|
qemu_get_buffer(f, s->buffer, 4096);
|
|
qemu_get_sbe32s(f, &s->tx_busy);
|
|
qemu_get_sbe32s(f, &s->tx_busy);
|
|
qemu_get_timer(f, s->poll_timer);
|
|
qemu_get_timer(f, s->poll_timer);
|
|
@@ -1943,9 +1941,6 @@ static int pci_pcnet_load(QEMUFile *f, void *opaque, int version_id)
|
|
PCIPCNetState *s = opaque;
|
|
PCIPCNetState *s = opaque;
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
- if (version_id != 2)
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
ret = pci_device_load(&s->pci_dev, f);
|
|
ret = pci_device_load(&s->pci_dev, f);
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
return ret;
|
|
return ret;
|
|
@@ -2071,7 +2066,7 @@ static int pci_pcnet_init(PCIDevice *pci_dev)
|
|
s->phys_mem_read = pci_physical_memory_read;
|
|
s->phys_mem_read = pci_physical_memory_read;
|
|
s->phys_mem_write = pci_physical_memory_write;
|
|
s->phys_mem_write = pci_physical_memory_write;
|
|
|
|
|
|
- register_savevm("pcnet", -1, 2, pci_pcnet_save, pci_pcnet_load, d);
|
|
|
|
|
|
+ register_savevm("pcnet", -1, 3, pci_pcnet_save, pci_pcnet_load, d);
|
|
return pcnet_common_init(&pci_dev->qdev, s, pci_pcnet_cleanup);
|
|
return pcnet_common_init(&pci_dev->qdev, s, pci_pcnet_cleanup);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2148,7 +2143,7 @@ static int lance_init(SysBusDevice *dev)
|
|
s->phys_mem_read = ledma_memory_read;
|
|
s->phys_mem_read = ledma_memory_read;
|
|
s->phys_mem_write = ledma_memory_write;
|
|
s->phys_mem_write = ledma_memory_write;
|
|
|
|
|
|
- register_savevm("pcnet", -1, 2, pcnet_save, pcnet_load, s);
|
|
|
|
|
|
+ register_savevm("pcnet", -1, 3, pcnet_save, pcnet_load, s);
|
|
return pcnet_common_init(&dev->qdev, s, lance_cleanup);
|
|
return pcnet_common_init(&dev->qdev, s, lance_cleanup);
|
|
}
|
|
}
|
|
|
|
|