Re: [PATCH 20/39] virtio-pci: convert to memory API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux