19 |
19 |
#include "pci.h"
|
20 |
20 |
//#include "sysemu.h"
|
21 |
21 |
#include "msix.h"
|
|
22 |
#include "net.h"
|
22 |
23 |
|
23 |
24 |
/* from Linux's linux/virtio_pci.h */
|
24 |
25 |
|
... | ... | |
87 |
88 |
VirtIODevice *vdev;
|
88 |
89 |
uint32_t addr;
|
89 |
90 |
uint32_t class_code;
|
|
91 |
uint32_t nvectors;
|
90 |
92 |
} VirtIOPCIProxy;
|
91 |
93 |
|
92 |
94 |
/* virtio device */
|
... | ... | |
486 |
488 |
VirtIODevice *vdev;
|
487 |
489 |
|
488 |
490 |
vdev = virtio_net_init(&pci_dev->qdev);
|
|
491 |
|
|
492 |
/* set nvectors from property, unless the user specified something
|
|
493 |
* via -net nic,model=virtio,vectors=n command line option */
|
|
494 |
if (pci_dev->qdev.nd->nvectors == NIC_NVECTORS_UNSPECIFIED)
|
|
495 |
if (proxy->nvectors != NIC_NVECTORS_UNSPECIFIED)
|
|
496 |
vdev->nvectors = proxy->nvectors;
|
|
497 |
|
489 |
498 |
virtio_init_pci(proxy, vdev,
|
490 |
499 |
PCI_VENDOR_ID_REDHAT_QUMRANET,
|
491 |
500 |
PCI_DEVICE_ID_VIRTIO_NET,
|
492 |
501 |
PCI_CLASS_NETWORK_ETHERNET,
|
493 |
502 |
0x00);
|
|
503 |
|
|
504 |
/* make the actual value visible */
|
|
505 |
proxy->nvectors = vdev->nvectors;
|
494 |
506 |
}
|
495 |
507 |
|
496 |
508 |
static void virtio_balloon_init_pci(PCIDevice *pci_dev)
|
... | ... | |
520 |
532 |
{/* end of list */}
|
521 |
533 |
},
|
522 |
534 |
},{
|
523 |
|
.qdev.name = "virtio-net-pci",
|
524 |
|
.qdev.size = sizeof(VirtIOPCIProxy),
|
525 |
|
.init = virtio_net_init_pci,
|
|
535 |
.qdev.name = "virtio-net-pci",
|
|
536 |
.qdev.size = sizeof(VirtIOPCIProxy),
|
|
537 |
.init = virtio_net_init_pci,
|
|
538 |
.qdev.props = (Property[]) {
|
|
539 |
{
|
|
540 |
.name = "vectors",
|
|
541 |
.info = &qdev_prop_uint32,
|
|
542 |
.offset = offsetof(VirtIOPCIProxy, nvectors),
|
|
543 |
.defval = (uint32_t[]) { NIC_NVECTORS_UNSPECIFIED },
|
|
544 |
},
|
|
545 |
{/* end of list */}
|
|
546 |
},
|
526 |
547 |
},{
|
527 |
548 |
.qdev.name = "virtio-console-pci",
|
528 |
549 |
.qdev.size = sizeof(VirtIOPCIProxy),
|