From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:53054) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QnnoY-0006Sl-TJ for qemu-devel@nongnu.org; Mon, 01 Aug 2011 04:25:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QnnoX-0001nS-Rw for qemu-devel@nongnu.org; Mon, 01 Aug 2011 04:25:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:29137) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QnnoX-0001nN-Kv for qemu-devel@nongnu.org; Mon, 01 Aug 2011 04:25:29 -0400 Date: Mon, 1 Aug 2011 11:26:00 +0300 From: "Michael S. Tsirkin" Message-ID: <20110801082600.GD5439@redhat.com> References: <1312135082-31985-1-git-send-email-avi@redhat.com> <1312135082-31985-21-git-send-email-avi@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1312135082-31985-21-git-send-email-avi@redhat.com> Subject: Re: [Qemu-devel] [PATCH 20/39] virtio-pci: convert to memory API List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org On Sun, Jul 31, 2011 at 08:57:43PM +0300, Avi Kivity wrote: > @@ -491,30 +473,26 @@ static void virtio_pci_config_writel(void *opaque, uint32_t addr, uint32_t val) > virtio_config_writel(proxy->vdev, addr, val); > } > > -static void virtio_map(PCIDevice *pci_dev, int region_num, > - pcibus_t addr, pcibus_t size, int type) > -{ > - VirtIOPCIProxy *proxy = container_of(pci_dev, VirtIOPCIProxy, pci_dev); > - VirtIODevice *vdev = proxy->vdev; > - unsigned config_len = VIRTIO_PCI_REGION_SIZE(pci_dev) + vdev->config_len; > - > - proxy->addr = addr; > - > - register_ioport_write(addr, config_len, 1, virtio_pci_config_writeb, proxy); > - register_ioport_write(addr, config_len, 2, virtio_pci_config_writew, proxy); > - register_ioport_write(addr, config_len, 4, virtio_pci_config_writel, proxy); > - register_ioport_read(addr, config_len, 1, virtio_pci_config_readb, proxy); > - register_ioport_read(addr, config_len, 2, virtio_pci_config_readw, proxy); > - register_ioport_read(addr, config_len, 4, virtio_pci_config_readl, proxy); > +const MemoryRegionPortio virtio_portio[] = { > + { 0, 0x10000, 1, .write = virtio_pci_config_writeb, }, > + { 0, 0x10000, 2, .write = virtio_pci_config_writew, }, > + { 0, 0x10000, 4, .write = virtio_pci_config_writel, }, > + { 0, 0x10000, 1, .read = virtio_pci_config_readb, }, > + { 0, 0x10000, 2, .read = virtio_pci_config_readw, }, > + { 0, 0x10000, 4, .read = virtio_pci_config_readl, }, > + PORTIO_END > +}; > > - if (vdev->config_len) > - vdev->get_config(vdev, vdev->config); > -} > +static const MemoryRegionOps virtio_pci_config_ops = { > + .old_portio = virtio_portio, > + .endianness = DEVICE_LITTLE_ENDIAN, > +}; > > static void virtio_write_config(PCIDevice *pci_dev, uint32_t address, > uint32_t val, int len) > { > VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev); > + VirtIODevice *vdev = proxy->vdev; > > if (PCI_COMMAND == address) { > if (!(val & PCI_COMMAND_MASTER)) { > @@ -525,6 +503,9 @@ static void virtio_write_config(PCIDevice *pci_dev, uint32_t address, > } > } > } > + if (address == PCI_BASE_ADDRESS_0 && vdev->config_len) { > + vdev->get_config(vdev, vdev->config); > + } > > pci_default_write_config(pci_dev, address, val, len); > msix_write_config(pci_dev, address, val, len); I'm not really sure why did we get the config on map, specifically - Anthony, do you know? But if we want to do that, memory space enable might be a better place. Or maybe we just want a callback on map. -- MST