Revision 4b16eb9d hw/cirrus_vga.c
b/hw/cirrus_vga.c | ||
---|---|---|
2618 | 2618 |
|
2619 | 2619 |
static void map_linear_vram(CirrusVGAState *s) |
2620 | 2620 |
{ |
2621 |
vga_dirty_log_stop((VGAState *)s); |
|
2622 |
|
|
2623 | 2621 |
if (!s->map_addr && s->lfb_addr && s->lfb_end) { |
2624 | 2622 |
s->map_addr = s->lfb_addr; |
2625 | 2623 |
s->map_end = s->lfb_end; |
... | ... | |
2631 | 2629 |
|
2632 | 2630 |
s->lfb_vram_mapped = 0; |
2633 | 2631 |
|
2634 |
cpu_register_physical_memory(isa_mem_base + 0xa0000, 0x8000, |
|
2635 |
(s->vram_offset + s->cirrus_bank_base[0]) | IO_MEM_UNASSIGNED); |
|
2636 |
cpu_register_physical_memory(isa_mem_base + 0xa8000, 0x8000, |
|
2637 |
(s->vram_offset + s->cirrus_bank_base[1]) | IO_MEM_UNASSIGNED); |
|
2638 | 2632 |
if (!(s->cirrus_srcptr != s->cirrus_srcptr_end) |
2639 | 2633 |
&& !((s->sr[0x07] & 0x01) == 0) |
2640 | 2634 |
&& !((s->gr[0x0B] & 0x14) == 0x14) |
2641 | 2635 |
&& !(s->gr[0x0B] & 0x02)) { |
2642 | 2636 |
|
2643 |
vga_dirty_log_stop((VGAState *)s); |
|
2644 | 2637 |
cpu_register_physical_memory(isa_mem_base + 0xa0000, 0x8000, |
2645 | 2638 |
(s->vram_offset + s->cirrus_bank_base[0]) | IO_MEM_RAM); |
2646 | 2639 |
cpu_register_physical_memory(isa_mem_base + 0xa8000, 0x8000, |
... | ... | |
2658 | 2651 |
|
2659 | 2652 |
static void unmap_linear_vram(CirrusVGAState *s) |
2660 | 2653 |
{ |
2661 |
vga_dirty_log_stop((VGAState *)s); |
|
2662 |
|
|
2663 | 2654 |
if (s->map_addr && s->lfb_addr && s->lfb_end) |
2664 | 2655 |
s->map_addr = s->map_end = 0; |
2665 | 2656 |
|
2666 | 2657 |
cpu_register_physical_memory(isa_mem_base + 0xa0000, 0x20000, |
2667 | 2658 |
s->vga_io_memory); |
2668 |
|
|
2669 |
vga_dirty_log_start((VGAState *)s); |
|
2670 | 2659 |
} |
2671 | 2660 |
|
2672 | 2661 |
/* Compute the memory access functions */ |
... | ... | |
3313 | 3302 |
{ |
3314 | 3303 |
CirrusVGAState *s = &((PCICirrusVGAState *)d)->cirrus_vga; |
3315 | 3304 |
|
3316 |
vga_dirty_log_stop((VGAState *)s); |
|
3317 |
|
|
3318 | 3305 |
/* XXX: add byte swapping apertures */ |
3319 | 3306 |
cpu_register_physical_memory(addr, s->vram_size, |
3320 | 3307 |
s->cirrus_linear_io_addr); |
... | ... | |
3346 | 3333 |
PCICirrusVGAState *pvs = container_of(d, PCICirrusVGAState, dev); |
3347 | 3334 |
CirrusVGAState *s = &pvs->cirrus_vga; |
3348 | 3335 |
|
3349 |
vga_dirty_log_stop((VGAState *)s); |
|
3350 |
|
|
3351 | 3336 |
pci_default_write_config(d, address, val, len); |
3352 | 3337 |
if (s->map_addr && pvs->dev.io_regions[0].addr == -1) |
3353 | 3338 |
s->map_addr = 0; |
3354 | 3339 |
cirrus_update_memory_access(s); |
3355 |
|
|
3356 |
vga_dirty_log_start((VGAState *)s); |
|
3357 | 3340 |
} |
3358 | 3341 |
|
3359 | 3342 |
void pci_cirrus_vga_init(PCIBus *bus, int vga_ram_size) |
Also available in: Unified diff