From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=42696 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Oc3wq-00030V-Vg for qemu-devel@nongnu.org; Thu, 22 Jul 2010 18:09:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Oc3pN-0003DJ-R7 for qemu-devel@nongnu.org; Thu, 22 Jul 2010 18:01:18 -0400 Received: from mail-qw0-f45.google.com ([209.85.216.45]:59449) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Oc3pN-0003DF-Nw for qemu-devel@nongnu.org; Thu, 22 Jul 2010 18:01:17 -0400 Received: by qwf6 with SMTP id 6so3334495qwf.4 for ; Thu, 22 Jul 2010 15:01:17 -0700 (PDT) MIME-Version: 1.0 From: Blue Swirl Date: Thu, 22 Jul 2010 22:00:55 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: [Qemu-devel] [PATCH 24/34] vmware_vga: convert to pci_bar_map List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel Use pci_bar_map() and post_map_func instead of a mapping function. Signed-off-by: Blue Swirl --- hw/vmware_vga.c | 93 +++++++++++++++++++++++++++++++++--------------------- 1 files changed, 57 insertions(+), 36 deletions(-) diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c index 00fa8fd..1e2d174 100644 --- a/hw/vmware_vga.c +++ b/hw/vmware_vga.c @@ -1178,42 +1178,49 @@ static void vmsvga_init(struct vmsvga_state_s *s, int vga_ram_size) vmsvga_reset(s); } -static void pci_vmsvga_map_ioport(PCIDevice *pci_dev, int region_num, - pcibus_t addr, pcibus_t size, int type) -{ - struct pci_vmsvga_state_s *d = (struct pci_vmsvga_state_s *) pci_dev; - struct vmsvga_state_s *s = &d->chip; +static IOPortWriteFunc * const vmsvga_index_io_writes[] = { + NULL, + NULL, + vmsvga_index_write, +}; - register_ioport_read(addr + SVGA_IO_MUL * SVGA_INDEX_PORT, - 1, 4, vmsvga_index_read, s); - register_ioport_write(addr + SVGA_IO_MUL * SVGA_INDEX_PORT, - 1, 4, vmsvga_index_write, s); - register_ioport_read(addr + SVGA_IO_MUL * SVGA_VALUE_PORT, - 1, 4, vmsvga_value_read, s); - register_ioport_write(addr + SVGA_IO_MUL * SVGA_VALUE_PORT, - 1, 4, vmsvga_value_write, s); - register_ioport_read(addr + SVGA_IO_MUL * SVGA_BIOS_PORT, - 1, 4, vmsvga_bios_read, s); - register_ioport_write(addr + SVGA_IO_MUL * SVGA_BIOS_PORT, - 1, 4, vmsvga_bios_write, s); -} +static IOPortReadFunc * const vmsvga_index_io_reads[] = { + NULL, + NULL, + vmsvga_index_read, +}; + +static IOPortWriteFunc * const vmsvga_value_io_writes[] = { + NULL, + NULL, + vmsvga_value_write, +}; + +static IOPortReadFunc * const vmsvga_value_io_reads[] = { + NULL, + NULL, + vmsvga_value_read, +}; + +static IOPortWriteFunc * const vmsvga_bios_io_writes[] = { + NULL, + NULL, + vmsvga_bios_write, +}; + +static IOPortReadFunc * const vmsvga_bios_io_reads[] = { + NULL, + NULL, + vmsvga_bios_read, +}; static void pci_vmsvga_map_mem(PCIDevice *pci_dev, int region_num, pcibus_t addr, pcibus_t size, int type) { struct pci_vmsvga_state_s *d = (struct pci_vmsvga_state_s *) pci_dev; struct vmsvga_state_s *s = &d->chip; - ram_addr_t iomemtype; s->vram_base = addr; -#ifdef DIRECT_VRAM - iomemtype = cpu_register_io_memory(vmsvga_vram_read, - vmsvga_vram_write, s); -#else - iomemtype = s->vga.vram_offset | IO_MEM_RAM; -#endif - cpu_register_physical_memory(s->vram_base, s->vga.vram_size, - iomemtype); s->vga.map_addr = addr; s->vga.map_end = addr + s->vga.vram_size; @@ -1225,18 +1232,15 @@ static void pci_vmsvga_map_fifo(PCIDevice *pci_dev, int region_num, { struct pci_vmsvga_state_s *d = (struct pci_vmsvga_state_s *) pci_dev; struct vmsvga_state_s *s = &d->chip; - ram_addr_t iomemtype; s->fifo_base = addr; - iomemtype = s->fifo_offset | IO_MEM_RAM; - cpu_register_physical_memory(s->fifo_base, s->fifo_size, - iomemtype); } static int pci_vmsvga_initfn(PCIDevice *dev) { struct pci_vmsvga_state_s *s = DO_UPCAST(struct pci_vmsvga_state_s, card, dev); + ram_addr_t iomemtype; pci_config_set_vendor_id(s->card.config, PCI_VENDOR_ID_VMWARE); pci_config_set_device_id(s->card.config, SVGA_PCI_DEVICE_ID); @@ -1249,16 +1253,33 @@ static int pci_vmsvga_initfn(PCIDevice *dev) s->card.config[PCI_SUBSYSTEM_ID + 1] = SVGA_PCI_DEVICE_ID >> 8; s->card.config[PCI_INTERRUPT_LINE] = 0xff; /* End */ - pci_register_bar(&s->card, 0, 0x10, - PCI_BASE_ADDRESS_SPACE_IO, pci_vmsvga_map_ioport, NULL); + pci_register_bar(&s->card, 0, 0x10, PCI_BASE_ADDRESS_SPACE_IO, NULL, NULL); + iomemtype = cpu_register_io(vmsvga_index_io_reads, vmsvga_index_io_writes, + 4, &s->card); + pci_bar_map(&s->card, 0, 0, SVGA_IO_MUL * SVGA_INDEX_PORT, 4, iomemtype); + iomemtype = cpu_register_io(vmsvga_value_io_reads, vmsvga_value_io_writes, + 4, &s->card); + pci_bar_map(&s->card, 0, 0, SVGA_IO_MUL * SVGA_VALUE_PORT, 4, iomemtype); + iomemtype = cpu_register_io(vmsvga_bios_io_reads, vmsvga_bios_io_writes, + 4, &s->card); + pci_bar_map(&s->card, 0, 0, SVGA_IO_MUL * SVGA_BIOS_PORT, 4, iomemtype); pci_register_bar(&s->card, 1, VGA_RAM_SIZE, - PCI_BASE_ADDRESS_MEM_PREFETCH, pci_vmsvga_map_mem, NULL); - + PCI_BASE_ADDRESS_MEM_PREFETCH, NULL, pci_vmsvga_map_mem); pci_register_bar(&s->card, 2, SVGA_FIFO_SIZE, - PCI_BASE_ADDRESS_MEM_PREFETCH, pci_vmsvga_map_fifo, NULL); + PCI_BASE_ADDRESS_MEM_PREFETCH, NULL, pci_vmsvga_map_fifo); vmsvga_init(&s->chip, VGA_RAM_SIZE); +#ifdef DIRECT_VRAM + iomemtype = cpu_register_io_memory(vmsvga_vram_read, + vmsvga_vram_write, s); +#else + iomemtype = s->chip.vga.vram_offset | IO_MEM_RAM; +#endif + pci_bar_map(&s->card, 1, 0, 0, s->chip.vga.vram_size, iomemtype); + iomemtype = s->chip.fifo_offset | IO_MEM_RAM; + pci_bar_map(&s->card, 2, 0, 0, s->chip.fifo_size, iomemtype); + return 0; } -- 1.6.2.4