Revision b0a21b53 hw/vga.c

b/hw/vga.c
1578 1578
    vga_mem_writel,
1579 1579
};
1580 1580

  
1581
static void vga_save(QEMUFile *f, void *opaque)
1582
{
1583
    VGAState *s = opaque;
1584
    int i;
1585

  
1586
    qemu_put_be32s(f, &s->latch);
1587
    qemu_put_8s(f, &s->sr_index);
1588
    qemu_put_buffer(f, s->sr, 8);
1589
    qemu_put_8s(f, &s->gr_index);
1590
    qemu_put_buffer(f, s->gr, 16);
1591
    qemu_put_8s(f, &s->ar_index);
1592
    qemu_put_buffer(f, s->ar, 21);
1593
    qemu_put_be32s(f, &s->ar_flip_flop);
1594
    qemu_put_8s(f, &s->cr_index);
1595
    qemu_put_buffer(f, s->cr, 256);
1596
    qemu_put_8s(f, &s->msr);
1597
    qemu_put_8s(f, &s->fcr);
1598
    qemu_put_8s(f, &s->st00);
1599
    qemu_put_8s(f, &s->st01);
1600

  
1601
    qemu_put_8s(f, &s->dac_state);
1602
    qemu_put_8s(f, &s->dac_sub_index);
1603
    qemu_put_8s(f, &s->dac_read_index);
1604
    qemu_put_8s(f, &s->dac_write_index);
1605
    qemu_put_buffer(f, s->dac_cache, 3);
1606
    qemu_put_buffer(f, s->palette, 768);
1607

  
1608
    qemu_put_be32s(f, &s->bank_offset);
1609
#ifdef CONFIG_BOCHS_VBE
1610
    qemu_put_byte(f, 1);
1611
    qemu_put_be16s(f, &s->vbe_index);
1612
    for(i = 0; i < VBE_DISPI_INDEX_NB; i++)
1613
        qemu_put_be16s(f, &s->vbe_regs[i]);
1614
    qemu_put_be32s(f, &s->vbe_start_addr);
1615
    qemu_put_be32s(f, &s->vbe_line_offset);
1616
    qemu_put_be32s(f, &s->vbe_bank_mask);
1617
#else
1618
    qemu_put_byte(f, 0);
1619
#endif
1620
}
1621

  
1622
static int vga_load(QEMUFile *f, void *opaque, int version_id)
1623
{
1624
    VGAState *s = opaque;
1625
    int is_vbe, i;
1626

  
1627
    if (version_id != 1)
1628
        return -EINVAL;
1629

  
1630
    qemu_get_be32s(f, &s->latch);
1631
    qemu_get_8s(f, &s->sr_index);
1632
    qemu_get_buffer(f, s->sr, 8);
1633
    qemu_get_8s(f, &s->gr_index);
1634
    qemu_get_buffer(f, s->gr, 16);
1635
    qemu_get_8s(f, &s->ar_index);
1636
    qemu_get_buffer(f, s->ar, 21);
1637
    qemu_get_be32s(f, &s->ar_flip_flop);
1638
    qemu_get_8s(f, &s->cr_index);
1639
    qemu_get_buffer(f, s->cr, 256);
1640
    qemu_get_8s(f, &s->msr);
1641
    qemu_get_8s(f, &s->fcr);
1642
    qemu_get_8s(f, &s->st00);
1643
    qemu_get_8s(f, &s->st01);
1644

  
1645
    qemu_get_8s(f, &s->dac_state);
1646
    qemu_get_8s(f, &s->dac_sub_index);
1647
    qemu_get_8s(f, &s->dac_read_index);
1648
    qemu_get_8s(f, &s->dac_write_index);
1649
    qemu_get_buffer(f, s->dac_cache, 3);
1650
    qemu_get_buffer(f, s->palette, 768);
1651

  
1652
    qemu_get_be32s(f, &s->bank_offset);
1653
    is_vbe = qemu_get_byte(f);
1654
#ifdef CONFIG_BOCHS_VBE
1655
    if (!is_vbe)
1656
        return -EINVAL;
1657
    qemu_get_be16s(f, &s->vbe_index);
1658
    for(i = 0; i < VBE_DISPI_INDEX_NB; i++)
1659
        qemu_get_be16s(f, &s->vbe_regs[i]);
1660
    qemu_get_be32s(f, &s->vbe_start_addr);
1661
    qemu_get_be32s(f, &s->vbe_line_offset);
1662
    qemu_get_be32s(f, &s->vbe_bank_mask);
1663
#else
1664
    if (is_vbe)
1665
        return -EINVAL;
1666
#endif
1667

  
1668
    /* force refresh */
1669
    s->graphic_mode = -1;
1670
    return 0;
1671
}
1672

  
1581 1673
int vga_initialize(DisplayState *ds, uint8_t *vga_ram_base, 
1582 1674
                   unsigned long vga_ram_offset, int vga_ram_size)
1583 1675
{
......
1614 1706
    s->vram_size = vga_ram_size;
1615 1707
    s->ds = ds;
1616 1708

  
1709
    register_savevm("vga", 0, 1, vga_save, vga_load, s);
1710

  
1617 1711
    register_ioport_write(0x3c0, 16, 1, vga_ioport_write, s);
1618 1712

  
1619 1713
    register_ioport_write(0x3b4, 2, 1, vga_ioport_write, s);

Also available in: Unified diff