Revision ed757e14 hw/virtio-pci.c
b/hw/virtio-pci.c | ||
---|---|---|
364 | 364 |
static void virtio_write_config(PCIDevice *pci_dev, uint32_t address, |
365 | 365 |
uint32_t val, int len) |
366 | 366 |
{ |
367 |
VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev); |
|
368 |
|
|
369 |
if (PCI_COMMAND == address) { |
|
370 |
if (!(val & PCI_COMMAND_MASTER)) { |
|
371 |
proxy->vdev->status &= !VIRTIO_CONFIG_S_DRIVER_OK; |
|
372 |
} |
|
373 |
} |
|
374 |
|
|
367 | 375 |
pci_default_write_config(pci_dev, address, val, len); |
368 |
msix_write_config(pci_dev, address, val, len); |
|
376 |
if(proxy->vdev->nvectors) |
|
377 |
msix_write_config(pci_dev, address, val, len); |
|
369 | 378 |
} |
370 | 379 |
|
371 | 380 |
static const VirtIOBindings virtio_pci_bindings = { |
... | ... | |
407 | 416 |
msix_bar_size(&proxy->pci_dev), |
408 | 417 |
PCI_ADDRESS_SPACE_MEM, |
409 | 418 |
msix_mmio_map); |
410 |
proxy->pci_dev.config_write = virtio_write_config; |
|
411 | 419 |
proxy->pci_dev.unregister = msix_uninit; |
412 | 420 |
} else |
413 | 421 |
vdev->nvectors = 0; |
414 | 422 |
|
423 |
proxy->pci_dev.config_write = virtio_write_config; |
|
424 |
|
|
415 | 425 |
size = VIRTIO_PCI_REGION_SIZE(&proxy->pci_dev) + vdev->config_len; |
416 | 426 |
if (size & (size-1)) |
417 | 427 |
size = 1 << qemu_fls(size); |
Also available in: Unified diff