Revision 30ca2aab hw/ne2000.c
b/hw/ne2000.c | ||
---|---|---|
538 | 538 |
return 0; |
539 | 539 |
} |
540 | 540 |
|
541 |
static void ne2000_save(QEMUFile* f,void* opaque) |
|
542 |
{ |
|
543 |
NE2000State* s=(NE2000State*)opaque; |
|
544 |
|
|
545 |
qemu_put_8s(f, &s->cmd); |
|
546 |
qemu_put_be32s(f, &s->start); |
|
547 |
qemu_put_be32s(f, &s->stop); |
|
548 |
qemu_put_8s(f, &s->boundary); |
|
549 |
qemu_put_8s(f, &s->tsr); |
|
550 |
qemu_put_8s(f, &s->tpsr); |
|
551 |
qemu_put_be16s(f, &s->tcnt); |
|
552 |
qemu_put_be16s(f, &s->rcnt); |
|
553 |
qemu_put_be32s(f, &s->rsar); |
|
554 |
qemu_put_8s(f, &s->rsr); |
|
555 |
qemu_put_8s(f, &s->isr); |
|
556 |
qemu_put_8s(f, &s->dcfg); |
|
557 |
qemu_put_8s(f, &s->imr); |
|
558 |
qemu_put_buffer(f, s->phys, 6); |
|
559 |
qemu_put_8s(f, &s->curpag); |
|
560 |
qemu_put_buffer(f, s->mult, 8); |
|
561 |
qemu_put_be32s(f, &s->irq); |
|
562 |
qemu_put_buffer(f, s->mem, NE2000_MEM_SIZE); |
|
563 |
} |
|
564 |
|
|
565 |
static int ne2000_load(QEMUFile* f,void* opaque,int version_id) |
|
566 |
{ |
|
567 |
NE2000State* s=(NE2000State*)opaque; |
|
568 |
|
|
569 |
if (version_id != 1) |
|
570 |
return -EINVAL; |
|
571 |
|
|
572 |
qemu_get_8s(f, &s->cmd); |
|
573 |
qemu_get_be32s(f, &s->start); |
|
574 |
qemu_get_be32s(f, &s->stop); |
|
575 |
qemu_get_8s(f, &s->boundary); |
|
576 |
qemu_get_8s(f, &s->tsr); |
|
577 |
qemu_get_8s(f, &s->tpsr); |
|
578 |
qemu_get_be16s(f, &s->tcnt); |
|
579 |
qemu_get_be16s(f, &s->rcnt); |
|
580 |
qemu_get_be32s(f, &s->rsar); |
|
581 |
qemu_get_8s(f, &s->rsr); |
|
582 |
qemu_get_8s(f, &s->isr); |
|
583 |
qemu_get_8s(f, &s->dcfg); |
|
584 |
qemu_get_8s(f, &s->imr); |
|
585 |
qemu_get_buffer(f, s->phys, 6); |
|
586 |
qemu_get_8s(f, &s->curpag); |
|
587 |
qemu_get_buffer(f, s->mult, 8); |
|
588 |
qemu_get_be32s(f, &s->irq); |
|
589 |
qemu_get_buffer(f, s->mem, NE2000_MEM_SIZE); |
|
590 |
|
|
591 |
return 0; |
|
592 |
} |
|
593 |
|
|
541 | 594 |
void isa_ne2000_init(int base, int irq, NetDriverState *nd) |
542 | 595 |
{ |
543 | 596 |
NE2000State *s; |
... | ... | |
562 | 615 |
ne2000_reset(s); |
563 | 616 |
|
564 | 617 |
qemu_add_read_packet(nd, ne2000_can_receive, ne2000_receive, s); |
618 |
|
|
619 |
register_savevm("ne2000", 0, 1, ne2000_save, ne2000_load, s); |
|
620 |
|
|
565 | 621 |
} |
566 | 622 |
|
567 | 623 |
/***********************************************************/ |
... | ... | |
612 | 668 |
pci_conf[0x0e] = 0x00; // header_type |
613 | 669 |
pci_conf[0x3d] = 1; // interrupt pin 0 |
614 | 670 |
|
615 |
pci_register_io_region((PCIDevice *)d, 0, 0x100,
|
|
671 |
pci_register_io_region(&d->dev, 0, 0x100,
|
|
616 | 672 |
PCI_ADDRESS_SPACE_IO, ne2000_map); |
617 | 673 |
s = &d->ne2000; |
618 | 674 |
s->irq = 16; // PCI interrupt |
... | ... | |
620 | 676 |
s->nd = nd; |
621 | 677 |
ne2000_reset(s); |
622 | 678 |
qemu_add_read_packet(nd, ne2000_can_receive, ne2000_receive, s); |
679 |
|
|
680 |
/* XXX: instance number ? */ |
|
681 |
register_savevm("ne2000", 0, 1, ne2000_save, ne2000_load, s); |
|
682 |
register_savevm("ne2000_pci", 0, 1, generic_pci_save, generic_pci_load, |
|
683 |
&d->dev); |
|
623 | 684 |
} |
Also available in: Unified diff