vga: Convert to isa_register_portio_list
[jan: fix cut'n'paste errors] [avi: adjust pci variants not to use isa functions] Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
42c1a22de7
commit
0a039dc700
2
hw/qxl.c
2
hw/qxl.c
@ -1601,7 +1601,7 @@ static int qxl_init_primary(PCIDevice *dev)
|
||||
ram_size = 32 * 1024 * 1024;
|
||||
}
|
||||
vga_common_init(vga, ram_size);
|
||||
vga_init(vga, pci_address_space(dev));
|
||||
vga_init(vga, pci_address_space(dev), pci_address_space_io(dev), false);
|
||||
register_ioport_write(0x3c0, 16, 1, qxl_vga_ioport_write, vga);
|
||||
register_ioport_write(0x3b4, 2, 1, qxl_vga_ioport_write, vga);
|
||||
register_ioport_write(0x3d4, 2, 1, qxl_vga_ioport_write, vga);
|
||||
|
17
hw/vga-isa.c
17
hw/vga-isa.c
@ -47,24 +47,19 @@ static int vga_initfn(ISADevice *dev)
|
||||
ISAVGAState *d = DO_UPCAST(ISAVGAState, dev, dev);
|
||||
VGACommonState *s = &d->state;
|
||||
MemoryRegion *vga_io_memory;
|
||||
const MemoryRegionPortio *vga_ports, *vbe_ports;
|
||||
|
||||
vga_common_init(s, VGA_RAM_SIZE);
|
||||
s->legacy_address_space = isa_address_space(dev);
|
||||
vga_io_memory = vga_init_io(s);
|
||||
vga_io_memory = vga_init_io(s, &vga_ports, &vbe_ports);
|
||||
isa_register_portio_list(dev, 0x3b0, vga_ports, s, "vga");
|
||||
if (vbe_ports) {
|
||||
isa_register_portio_list(dev, 0x1ce, vbe_ports, s, "vbe");
|
||||
}
|
||||
memory_region_add_subregion_overlap(isa_address_space(dev),
|
||||
isa_mem_base + 0x000a0000,
|
||||
vga_io_memory, 1);
|
||||
memory_region_set_coalescing(vga_io_memory);
|
||||
isa_init_ioport(dev, 0x3c0);
|
||||
isa_init_ioport(dev, 0x3b4);
|
||||
isa_init_ioport(dev, 0x3ba);
|
||||
isa_init_ioport(dev, 0x3da);
|
||||
isa_init_ioport(dev, 0x3c0);
|
||||
#ifdef CONFIG_BOCHS_VBE
|
||||
isa_init_ioport(dev, 0x1ce);
|
||||
isa_init_ioport(dev, 0x1cf);
|
||||
isa_init_ioport(dev, 0x1d0);
|
||||
#endif /* CONFIG_BOCHS_VBE */
|
||||
s->ds = graphic_console_init(s->update, s->invalidate,
|
||||
s->screen_dump, s->text_update, s);
|
||||
|
||||
|
@ -54,7 +54,7 @@ static int pci_vga_initfn(PCIDevice *dev)
|
||||
|
||||
// vga + console init
|
||||
vga_common_init(s, VGA_RAM_SIZE);
|
||||
vga_init(s, pci_address_space(dev));
|
||||
vga_init(s, pci_address_space(dev), pci_address_space_io(dev), true);
|
||||
|
||||
s->ds = graphic_console_init(s->update, s->invalidate,
|
||||
s->screen_dump, s->text_update, s);
|
||||
|
73
hw/vga.c
73
hw/vga.c
@ -2241,40 +2241,39 @@ void vga_common_init(VGACommonState *s, int vga_ram_size)
|
||||
vga_dirty_log_start(s);
|
||||
}
|
||||
|
||||
/* used by both ISA and PCI */
|
||||
MemoryRegion *vga_init_io(VGACommonState *s)
|
||||
static const MemoryRegionPortio vga_portio_list[] = {
|
||||
{ 0x04, 2, 1, .read = vga_ioport_read, .write = vga_ioport_write }, /* 3b4 */
|
||||
{ 0x0a, 1, 1, .read = vga_ioport_read, .write = vga_ioport_write }, /* 3ba */
|
||||
{ 0x10, 16, 1, .read = vga_ioport_read, .write = vga_ioport_write }, /* 3c0 */
|
||||
{ 0x24, 2, 1, .read = vga_ioport_read, .write = vga_ioport_write }, /* 3d4 */
|
||||
{ 0x2a, 1, 1, .read = vga_ioport_read, .write = vga_ioport_write }, /* 3da */
|
||||
PORTIO_END_OF_LIST(),
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BOCHS_VBE
|
||||
static const MemoryRegionPortio vbe_portio_list[] = {
|
||||
{ 0, 1, 2, .read = vbe_ioport_read_index, .write = vbe_ioport_write_index },
|
||||
# ifdef TARGET_I386
|
||||
{ 1, 1, 2, .read = vbe_ioport_read_data, .write = vbe_ioport_write_data },
|
||||
# else
|
||||
{ 2, 1, 2, .read = vbe_ioport_read_data, .write = vbe_ioport_write_data },
|
||||
# endif
|
||||
PORTIO_END_OF_LIST(),
|
||||
};
|
||||
#endif /* CONFIG_BOCHS_VBE */
|
||||
|
||||
/* Used by both ISA and PCI */
|
||||
MemoryRegion *vga_init_io(VGACommonState *s,
|
||||
const MemoryRegionPortio **vga_ports,
|
||||
const MemoryRegionPortio **vbe_ports)
|
||||
{
|
||||
MemoryRegion *vga_mem;
|
||||
|
||||
register_ioport_write(0x3c0, 16, 1, vga_ioport_write, s);
|
||||
|
||||
register_ioport_write(0x3b4, 2, 1, vga_ioport_write, s);
|
||||
register_ioport_write(0x3d4, 2, 1, vga_ioport_write, s);
|
||||
register_ioport_write(0x3ba, 1, 1, vga_ioport_write, s);
|
||||
register_ioport_write(0x3da, 1, 1, vga_ioport_write, s);
|
||||
|
||||
register_ioport_read(0x3c0, 16, 1, vga_ioport_read, s);
|
||||
|
||||
register_ioport_read(0x3b4, 2, 1, vga_ioport_read, s);
|
||||
register_ioport_read(0x3d4, 2, 1, vga_ioport_read, s);
|
||||
register_ioport_read(0x3ba, 1, 1, vga_ioport_read, s);
|
||||
register_ioport_read(0x3da, 1, 1, vga_ioport_read, s);
|
||||
|
||||
*vga_ports = vga_portio_list;
|
||||
*vbe_ports = NULL;
|
||||
#ifdef CONFIG_BOCHS_VBE
|
||||
#if defined (TARGET_I386)
|
||||
register_ioport_read(0x1ce, 1, 2, vbe_ioport_read_index, s);
|
||||
register_ioport_read(0x1cf, 1, 2, vbe_ioport_read_data, s);
|
||||
|
||||
register_ioport_write(0x1ce, 1, 2, vbe_ioport_write_index, s);
|
||||
register_ioport_write(0x1cf, 1, 2, vbe_ioport_write_data, s);
|
||||
#else
|
||||
register_ioport_read(0x1ce, 1, 2, vbe_ioport_read_index, s);
|
||||
register_ioport_read(0x1d0, 1, 2, vbe_ioport_read_data, s);
|
||||
|
||||
register_ioport_write(0x1ce, 1, 2, vbe_ioport_write_index, s);
|
||||
register_ioport_write(0x1d0, 1, 2, vbe_ioport_write_data, s);
|
||||
*vbe_ports = vbe_portio_list;
|
||||
#endif
|
||||
#endif /* CONFIG_BOCHS_VBE */
|
||||
|
||||
vga_mem = g_malloc(sizeof(*vga_mem));
|
||||
memory_region_init_io(vga_mem, &vga_mem_ops, s,
|
||||
@ -2283,9 +2282,13 @@ MemoryRegion *vga_init_io(VGACommonState *s)
|
||||
return vga_mem;
|
||||
}
|
||||
|
||||
void vga_init(VGACommonState *s, MemoryRegion *address_space)
|
||||
void vga_init(VGACommonState *s, MemoryRegion *address_space,
|
||||
MemoryRegion *address_space_io, bool init_vga_ports)
|
||||
{
|
||||
MemoryRegion *vga_io_memory;
|
||||
const MemoryRegionPortio *vga_ports, *vbe_ports;
|
||||
PortioList *vga_port_list = g_new(PortioList, 1);
|
||||
PortioList *vbe_port_list = g_new(PortioList, 1);
|
||||
|
||||
qemu_register_reset(vga_reset, s);
|
||||
|
||||
@ -2293,12 +2296,20 @@ void vga_init(VGACommonState *s, MemoryRegion *address_space)
|
||||
|
||||
s->legacy_address_space = address_space;
|
||||
|
||||
vga_io_memory = vga_init_io(s);
|
||||
vga_io_memory = vga_init_io(s, &vga_ports, &vbe_ports);
|
||||
memory_region_add_subregion_overlap(address_space,
|
||||
isa_mem_base + 0x000a0000,
|
||||
vga_io_memory,
|
||||
1);
|
||||
memory_region_set_coalescing(vga_io_memory);
|
||||
if (init_vga_ports) {
|
||||
portio_list_init(vga_port_list, vga_ports, s, "vga");
|
||||
portio_list_add(vga_port_list, address_space_io, 0x3b0);
|
||||
}
|
||||
if (vbe_ports) {
|
||||
portio_list_init(vbe_port_list, vbe_ports, s, "vbe");
|
||||
portio_list_add(vbe_port_list, address_space_io, 0x1ce);
|
||||
}
|
||||
}
|
||||
|
||||
void vga_init_vbe(VGACommonState *s, MemoryRegion *system_memory)
|
||||
|
@ -187,8 +187,11 @@ static inline int c6_to_8(int v)
|
||||
}
|
||||
|
||||
void vga_common_init(VGACommonState *s, int vga_ram_size);
|
||||
void vga_init(VGACommonState *s, MemoryRegion *address_space);
|
||||
MemoryRegion *vga_init_io(VGACommonState *s);
|
||||
void vga_init(VGACommonState *s, MemoryRegion *address_space,
|
||||
MemoryRegion *address_space_io, bool init_vga_ports);
|
||||
MemoryRegion *vga_init_io(VGACommonState *s,
|
||||
const MemoryRegionPortio **vga_ports,
|
||||
const MemoryRegionPortio **vbe_ports);
|
||||
void vga_common_reset(VGACommonState *s);
|
||||
|
||||
void vga_dirty_log_start(VGACommonState *s);
|
||||
|
@ -1079,7 +1079,7 @@ static const VMStateDescription vmstate_vmware_vga = {
|
||||
};
|
||||
|
||||
static void vmsvga_init(struct vmsvga_state_s *s, int vga_ram_size,
|
||||
MemoryRegion *address_space)
|
||||
MemoryRegion *address_space, MemoryRegion *io)
|
||||
{
|
||||
s->scratch_size = SVGA_SCRATCH_SIZE;
|
||||
s->scratch = g_malloc(s->scratch_size * 4);
|
||||
@ -1095,7 +1095,7 @@ static void vmsvga_init(struct vmsvga_state_s *s, int vga_ram_size,
|
||||
s->fifo_ptr = memory_region_get_ram_ptr(&s->fifo_ram);
|
||||
|
||||
vga_common_init(&s->vga, vga_ram_size);
|
||||
vga_init(&s->vga, address_space);
|
||||
vga_init(&s->vga, address_space, io, true);
|
||||
vmstate_register(NULL, 0, &vmstate_vga_common, &s->vga);
|
||||
|
||||
s->depth = ds_get_bits_per_pixel(s->vga.ds);
|
||||
@ -1183,7 +1183,8 @@ static int pci_vmsvga_initfn(PCIDevice *dev)
|
||||
"vmsvga-io", 0x10);
|
||||
pci_register_bar(&s->card, 0, PCI_BASE_ADDRESS_SPACE_IO, &s->io_bar);
|
||||
|
||||
vmsvga_init(&s->chip, VGA_RAM_SIZE, pci_address_space(dev));
|
||||
vmsvga_init(&s->chip, VGA_RAM_SIZE, pci_address_space(dev),
|
||||
pci_address_space_io(dev));
|
||||
|
||||
pci_register_bar(&s->card, 1, PCI_BASE_ADDRESS_MEM_PREFETCH, iomem);
|
||||
pci_register_bar(&s->card, 2, PCI_BASE_ADDRESS_MEM_PREFETCH,
|
||||
|
Loading…
Reference in New Issue
Block a user