mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
vga: convert vga and its derivatives to the memory API
Convert all vga memory to the memory API. Note we need to fall back to get_system_memory(), since the various buses don't pass the vga window as a memory region. We no longer need to sync the dirty bitmap of the cirrus mapped memory banks, since the memory API takes care of that for us. [jan: fix vga-pci logging] Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
7b619b9ae5
commit
b195043003
10 changed files with 440 additions and 438 deletions
|
@ -27,6 +27,7 @@
|
|||
#include "vga_int.h"
|
||||
#include "pixel_ops.h"
|
||||
#include "qemu-timer.h"
|
||||
#include "exec-memory.h"
|
||||
|
||||
typedef struct ISAVGAMMState {
|
||||
VGACommonState vga;
|
||||
|
@ -79,35 +80,44 @@ static void vga_mm_writel (void *opaque,
|
|||
vga_ioport_write(&s->vga, addr >> s->it_shift, value);
|
||||
}
|
||||
|
||||
static CPUReadMemoryFunc * const vga_mm_read_ctrl[] = {
|
||||
&vga_mm_readb,
|
||||
&vga_mm_readw,
|
||||
&vga_mm_readl,
|
||||
};
|
||||
|
||||
static CPUWriteMemoryFunc * const vga_mm_write_ctrl[] = {
|
||||
&vga_mm_writeb,
|
||||
&vga_mm_writew,
|
||||
&vga_mm_writel,
|
||||
static const MemoryRegionOps vga_mm_ctrl_ops = {
|
||||
.old_mmio = {
|
||||
.read = {
|
||||
vga_mm_readb,
|
||||
vga_mm_readw,
|
||||
vga_mm_readl,
|
||||
},
|
||||
.write = {
|
||||
vga_mm_writeb,
|
||||
vga_mm_writew,
|
||||
vga_mm_writel,
|
||||
},
|
||||
},
|
||||
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||
};
|
||||
|
||||
static void vga_mm_init(ISAVGAMMState *s, target_phys_addr_t vram_base,
|
||||
target_phys_addr_t ctrl_base, int it_shift)
|
||||
{
|
||||
int s_ioport_ctrl, vga_io_memory;
|
||||
MemoryRegion *s_ioport_ctrl, *vga_io_memory;
|
||||
|
||||
s->it_shift = it_shift;
|
||||
s_ioport_ctrl = cpu_register_io_memory(vga_mm_read_ctrl, vga_mm_write_ctrl, s,
|
||||
DEVICE_NATIVE_ENDIAN);
|
||||
vga_io_memory = cpu_register_io_memory(vga_mem_read, vga_mem_write, s,
|
||||
DEVICE_NATIVE_ENDIAN);
|
||||
s_ioport_ctrl = qemu_malloc(sizeof(*s_ioport_ctrl));
|
||||
memory_region_init_io(s_ioport_ctrl, &vga_mm_ctrl_ops, s,
|
||||
"vga-mm-ctrl", 0x100000);
|
||||
|
||||
vga_io_memory = qemu_malloc(sizeof(*vga_io_memory));
|
||||
/* XXX: endianness? */
|
||||
memory_region_init_io(vga_io_memory, &vga_mem_ops, &s->vga,
|
||||
"vga-mem", 0x20000);
|
||||
|
||||
vmstate_register(NULL, 0, &vmstate_vga_common, s);
|
||||
|
||||
cpu_register_physical_memory(ctrl_base, 0x100000, s_ioport_ctrl);
|
||||
memory_region_add_subregion(get_system_memory(), ctrl_base, s_ioport_ctrl);
|
||||
s->vga.bank_offset = 0;
|
||||
cpu_register_physical_memory(vram_base + 0x000a0000, 0x20000, vga_io_memory);
|
||||
qemu_register_coalesced_mmio(vram_base + 0x000a0000, 0x20000);
|
||||
memory_region_add_subregion(get_system_memory(),
|
||||
vram_base + 0x000a0000, vga_io_memory);
|
||||
memory_region_set_coalescing(vga_io_memory);
|
||||
}
|
||||
|
||||
int isa_vga_mm_init(target_phys_addr_t vram_base,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue