mirror of https://github.com/proxmox/mirror_qemu
E100 savevm/loadvm support, patch by Jason Wessel.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3041 c046a42c-6fe2-441c-8c8c-71466251a162master
parent
fbd1711dac
commit
2657c66332
102
hw/eepro100.c
102
hw/eepro100.c
|
@ -1571,10 +1571,9 @@ static void nic_receive(void *opaque, const uint8_t * buf, int size)
|
|||
static int nic_load(QEMUFile * f, void *opaque, int version_id)
|
||||
{
|
||||
EEPRO100State *s = (EEPRO100State *) opaque;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
missing("NIC load");
|
||||
|
||||
if (version_id > 3)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1608,14 +1607,61 @@ static int nic_load(QEMUFile * f, void *opaque, int version_id)
|
|||
qemu_get_buffer(f, s->mult, 8);
|
||||
qemu_get_buffer(f, s->mem, sizeof(s->mem));
|
||||
|
||||
/* Restore all members of struct between scv_stat and mem */
|
||||
qemu_get_8s(f, &s->scb_stat);
|
||||
qemu_get_8s(f, &s->int_stat);
|
||||
for (i = 0; i < 3; i++)
|
||||
qemu_get_be32s(f, &s->region[i]);
|
||||
qemu_get_buffer(f, s->macaddr, 6);
|
||||
for (i = 0; i < 19; i++)
|
||||
qemu_get_be32s(f, &s->statcounter[i]);
|
||||
for (i = 0; i < 32; i++)
|
||||
qemu_get_be16s(f, &s->mdimem[i]);
|
||||
/* The eeprom should be saved and restored by its own routines */
|
||||
qemu_get_be32s(f, &s->device);
|
||||
qemu_get_be32s(f, &s->pointer);
|
||||
qemu_get_be32s(f, &s->cu_base);
|
||||
qemu_get_be32s(f, &s->cu_offset);
|
||||
qemu_get_be32s(f, &s->ru_base);
|
||||
qemu_get_be32s(f, &s->ru_offset);
|
||||
qemu_get_be32s(f, &s->statsaddr);
|
||||
/* Restore epro100_stats_t statistics */
|
||||
qemu_get_be32s(f, &s->statistics.tx_good_frames);
|
||||
qemu_get_be32s(f, &s->statistics.tx_max_collisions);
|
||||
qemu_get_be32s(f, &s->statistics.tx_late_collisions);
|
||||
qemu_get_be32s(f, &s->statistics.tx_underruns);
|
||||
qemu_get_be32s(f, &s->statistics.tx_lost_crs);
|
||||
qemu_get_be32s(f, &s->statistics.tx_deferred);
|
||||
qemu_get_be32s(f, &s->statistics.tx_single_collisions);
|
||||
qemu_get_be32s(f, &s->statistics.tx_multiple_collisions);
|
||||
qemu_get_be32s(f, &s->statistics.tx_total_collisions);
|
||||
qemu_get_be32s(f, &s->statistics.rx_good_frames);
|
||||
qemu_get_be32s(f, &s->statistics.rx_crc_errors);
|
||||
qemu_get_be32s(f, &s->statistics.rx_alignment_errors);
|
||||
qemu_get_be32s(f, &s->statistics.rx_resource_errors);
|
||||
qemu_get_be32s(f, &s->statistics.rx_overrun_errors);
|
||||
qemu_get_be32s(f, &s->statistics.rx_cdt_errors);
|
||||
qemu_get_be32s(f, &s->statistics.rx_short_frame_errors);
|
||||
qemu_get_be32s(f, &s->statistics.fc_xmt_pause);
|
||||
qemu_get_be32s(f, &s->statistics.fc_rcv_pause);
|
||||
qemu_get_be32s(f, &s->statistics.fc_rcv_unsupported);
|
||||
qemu_get_be16s(f, &s->statistics.xmt_tco_frames);
|
||||
qemu_get_be16s(f, &s->statistics.rcv_tco_frames);
|
||||
qemu_get_be32s(f, &s->statistics.complete);
|
||||
#if 0
|
||||
qemu_get_be16s(f, &s->status);
|
||||
#endif
|
||||
|
||||
/* Configuration bytes. */
|
||||
qemu_get_buffer(f, s->configuration, sizeof(s->configuration));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void nic_save(QEMUFile * f, void *opaque)
|
||||
{
|
||||
EEPRO100State *s = (EEPRO100State *) opaque;
|
||||
|
||||
missing("NIC save");
|
||||
int i;
|
||||
|
||||
if (s->pci_dev)
|
||||
pci_device_save(s->pci_dev, f);
|
||||
|
@ -1639,6 +1685,54 @@ static void nic_save(QEMUFile * f, void *opaque)
|
|||
qemu_put_8s(f, &s->curpag);
|
||||
qemu_put_buffer(f, s->mult, 8);
|
||||
qemu_put_buffer(f, s->mem, sizeof(s->mem));
|
||||
|
||||
/* Save all members of struct between scv_stat and mem */
|
||||
qemu_put_8s(f, &s->scb_stat);
|
||||
qemu_put_8s(f, &s->int_stat);
|
||||
for (i = 0; i < 3; i++)
|
||||
qemu_put_be32s(f, &s->region[i]);
|
||||
qemu_put_buffer(f, s->macaddr, 6);
|
||||
for (i = 0; i < 19; i++)
|
||||
qemu_put_be32s(f, &s->statcounter[i]);
|
||||
for (i = 0; i < 32; i++)
|
||||
qemu_put_be16s(f, &s->mdimem[i]);
|
||||
/* The eeprom should be saved and restored by its own routines */
|
||||
qemu_put_be32s(f, &s->device);
|
||||
qemu_put_be32s(f, &s->pointer);
|
||||
qemu_put_be32s(f, &s->cu_base);
|
||||
qemu_put_be32s(f, &s->cu_offset);
|
||||
qemu_put_be32s(f, &s->ru_base);
|
||||
qemu_put_be32s(f, &s->ru_offset);
|
||||
qemu_put_be32s(f, &s->statsaddr);
|
||||
/* Save epro100_stats_t statistics */
|
||||
qemu_put_be32s(f, &s->statistics.tx_good_frames);
|
||||
qemu_put_be32s(f, &s->statistics.tx_max_collisions);
|
||||
qemu_put_be32s(f, &s->statistics.tx_late_collisions);
|
||||
qemu_put_be32s(f, &s->statistics.tx_underruns);
|
||||
qemu_put_be32s(f, &s->statistics.tx_lost_crs);
|
||||
qemu_put_be32s(f, &s->statistics.tx_deferred);
|
||||
qemu_put_be32s(f, &s->statistics.tx_single_collisions);
|
||||
qemu_put_be32s(f, &s->statistics.tx_multiple_collisions);
|
||||
qemu_put_be32s(f, &s->statistics.tx_total_collisions);
|
||||
qemu_put_be32s(f, &s->statistics.rx_good_frames);
|
||||
qemu_put_be32s(f, &s->statistics.rx_crc_errors);
|
||||
qemu_put_be32s(f, &s->statistics.rx_alignment_errors);
|
||||
qemu_put_be32s(f, &s->statistics.rx_resource_errors);
|
||||
qemu_put_be32s(f, &s->statistics.rx_overrun_errors);
|
||||
qemu_put_be32s(f, &s->statistics.rx_cdt_errors);
|
||||
qemu_put_be32s(f, &s->statistics.rx_short_frame_errors);
|
||||
qemu_put_be32s(f, &s->statistics.fc_xmt_pause);
|
||||
qemu_put_be32s(f, &s->statistics.fc_rcv_pause);
|
||||
qemu_put_be32s(f, &s->statistics.fc_rcv_unsupported);
|
||||
qemu_put_be16s(f, &s->statistics.xmt_tco_frames);
|
||||
qemu_put_be16s(f, &s->statistics.rcv_tco_frames);
|
||||
qemu_put_be32s(f, &s->statistics.complete);
|
||||
#if 0
|
||||
qemu_put_be16s(f, &s->status);
|
||||
#endif
|
||||
|
||||
/* Configuration bytes. */
|
||||
qemu_put_buffer(f, s->configuration, sizeof(s->configuration));
|
||||
}
|
||||
|
||||
static void nic_init(PCIBus * bus, NICInfo * nd,
|
||||
|
|
Loading…
Reference in New Issue