From: Jan Kiszka Date: Sat, 22 Jun 2013 06:07:01 +0000 (+0200) Subject: isa: implement isa_is_ioport_assigned via memory_region_find X-Git-Tag: v1.6.0-rc0~159^2~55 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b6f3296292f027c9a87a12dddd736a7c344d0206;p=thirdparty%2Fqemu.git isa: implement isa_is_ioport_assigned via memory_region_find Open-code isa_is_ioport_assigned via a memory region lookup. As all IO ports are now directly or indirectly registered via the memory API, this becomes possible and will finally allow us to drop the ioport tables. Signed-off-by: Jan Kiszka Signed-off-by: Paolo Bonzini --- diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 756df3bee2d..ff559c0a4a1 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -383,14 +383,15 @@ static void piix4_pm_powerdown_req(Notifier *n, void *opaque) static void piix4_pm_machine_ready(Notifier *n, void *opaque) { PIIX4PMState *s = container_of(n, PIIX4PMState, machine_ready); + MemoryRegion *io_as = pci_address_space_io(&s->dev); uint8_t *pci_conf; pci_conf = s->dev.config; - pci_conf[0x5f] = (isa_is_ioport_assigned(0x378) ? 0x80 : 0) | 0x10; + pci_conf[0x5f] = 0x10 | + (memory_region_find(io_as, 0x378, 1).mr ? 0x80 : 0); pci_conf[0x63] = 0x60; - pci_conf[0x67] = (isa_is_ioport_assigned(0x3f8) ? 0x08 : 0) | - (isa_is_ioport_assigned(0x2f8) ? 0x90 : 0); - + pci_conf[0x67] = (memory_region_find(io_as, 0x3f8, 1).mr ? 0x08 : 0) | + (memory_region_find(io_as, 0x2f8, 1).mr ? 0x90 : 0); } static int piix4_pm_initfn(PCIDevice *dev) diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c index 667e8829629..461ab7caf3d 100644 --- a/hw/isa/lpc_ich9.c +++ b/hw/isa/lpc_ich9.c @@ -477,22 +477,23 @@ static const MemoryRegionOps rbca_mmio_ops = { static void ich9_lpc_machine_ready(Notifier *n, void *opaque) { ICH9LPCState *s = container_of(n, ICH9LPCState, machine_ready); + MemoryRegion *io_as = pci_address_space_io(&s->d); uint8_t *pci_conf; pci_conf = s->d.config; - if (isa_is_ioport_assigned(0x3f8)) { + if (memory_region_find(io_as, 0x3f8, 1).mr) { /* com1 */ pci_conf[0x82] |= 0x01; } - if (isa_is_ioport_assigned(0x2f8)) { + if (memory_region_find(io_as, 0x2f8, 1).mr) { /* com2 */ pci_conf[0x82] |= 0x02; } - if (isa_is_ioport_assigned(0x378)) { + if (memory_region_find(io_as, 0x378, 1).mr) { /* lpt */ pci_conf[0x82] |= 0x04; } - if (isa_is_ioport_assigned(0x3f0)) { + if (memory_region_find(io_as, 0x3f0, 1).mr) { /* floppy */ pci_conf[0x82] |= 0x08; } diff --git a/include/exec/ioport.h b/include/exec/ioport.h index 4953892c16f..eb99ffe583b 100644 --- a/include/exec/ioport.h +++ b/include/exec/ioport.h @@ -40,7 +40,6 @@ typedef void (IOPortDestructor)(void *opaque); void ioport_register(IORange *iorange); void isa_unassign_ioport(pio_addr_t start, int length); -bool isa_is_ioport_assigned(pio_addr_t start); void cpu_outb(pio_addr_t addr, uint8_t val); void cpu_outw(pio_addr_t addr, uint16_t val); diff --git a/ioport.c b/ioport.c index d5b7fbdb5b8..56470c5ec30 100644 --- a/ioport.c +++ b/ioport.c @@ -273,13 +273,6 @@ void isa_unassign_ioport(pio_addr_t start, int length) } } -bool isa_is_ioport_assigned(pio_addr_t start) -{ - return (ioport_read_table[0][start] || ioport_write_table[0][start] || - ioport_read_table[1][start] || ioport_write_table[1][start] || - ioport_read_table[2][start] || ioport_write_table[2][start]); -} - /***********************************************************/ void cpu_outb(pio_addr_t addr, uint8_t val)