Commit cf21e106cd9b34a12a533191932a8a08a1f5ebe4
1 parent
9d07d757
Virtio-net qdev conversion
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
8 changed files
with
40 additions
and
32 deletions
hw/pci.c
hw/virtio-balloon.c
@@ -172,16 +172,20 @@ static int virtio_balloon_load(QEMUFile *f, void *opaque, int version_id) | @@ -172,16 +172,20 @@ static int virtio_balloon_load(QEMUFile *f, void *opaque, int version_id) | ||
172 | void *virtio_balloon_init(PCIBus *bus) | 172 | void *virtio_balloon_init(PCIBus *bus) |
173 | { | 173 | { |
174 | VirtIOBalloon *s; | 174 | VirtIOBalloon *s; |
175 | + PCIDevice *d; | ||
175 | 176 | ||
176 | - s = (VirtIOBalloon *)virtio_init_pci(bus, "virtio-balloon", | 177 | + d = pci_register_device(bus, "virtio-balloon", sizeof(VirtIOBalloon), |
178 | + -1, NULL, NULL); | ||
179 | + if (!d) | ||
180 | + return NULL; | ||
181 | + | ||
182 | + s = (VirtIOBalloon *)virtio_init_pci(d, "virtio-balloon", | ||
177 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 183 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
178 | PCI_DEVICE_ID_VIRTIO_BALLOON, | 184 | PCI_DEVICE_ID_VIRTIO_BALLOON, |
179 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 185 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
180 | VIRTIO_ID_BALLOON, | 186 | VIRTIO_ID_BALLOON, |
181 | PCI_CLASS_MEMORY_RAM, 0x00, | 187 | PCI_CLASS_MEMORY_RAM, 0x00, |
182 | - 8, sizeof(VirtIOBalloon)); | ||
183 | - if (s == NULL) | ||
184 | - return NULL; | 188 | + 8); |
185 | 189 | ||
186 | s->vdev.get_config = virtio_balloon_get_config; | 190 | s->vdev.get_config = virtio_balloon_get_config; |
187 | s->vdev.set_config = virtio_balloon_set_config; | 191 | s->vdev.set_config = virtio_balloon_set_config; |
hw/virtio-blk.c
@@ -353,16 +353,20 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs) | @@ -353,16 +353,20 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs) | ||
353 | VirtIOBlock *s; | 353 | VirtIOBlock *s; |
354 | int cylinders, heads, secs; | 354 | int cylinders, heads, secs; |
355 | static int virtio_blk_id; | 355 | static int virtio_blk_id; |
356 | + PCIDevice *d; | ||
356 | 357 | ||
357 | - s = (VirtIOBlock *)virtio_init_pci(bus, "virtio-blk", | 358 | + d = pci_register_device(bus, "virtio-blk", sizeof(VirtIOBlock), |
359 | + -1, NULL, NULL); | ||
360 | + if (!d) | ||
361 | + return NULL; | ||
362 | + | ||
363 | + s = (VirtIOBlock *)virtio_init_pci(d, "virtio-blk", | ||
358 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 364 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
359 | PCI_DEVICE_ID_VIRTIO_BLOCK, | 365 | PCI_DEVICE_ID_VIRTIO_BLOCK, |
360 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 366 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
361 | VIRTIO_ID_BLOCK, | 367 | VIRTIO_ID_BLOCK, |
362 | PCI_CLASS_STORAGE_OTHER, 0x00, | 368 | PCI_CLASS_STORAGE_OTHER, 0x00, |
363 | - sizeof(struct virtio_blk_config), sizeof(VirtIOBlock)); | ||
364 | - if (!s) | ||
365 | - return NULL; | 369 | + sizeof(struct virtio_blk_config)); |
366 | 370 | ||
367 | s->vdev.get_config = virtio_blk_update_config; | 371 | s->vdev.get_config = virtio_blk_update_config; |
368 | s->vdev.get_features = virtio_blk_get_features; | 372 | s->vdev.get_features = virtio_blk_get_features; |
hw/virtio-console.c
@@ -126,14 +126,20 @@ static int virtio_console_load(QEMUFile *f, void *opaque, int version_id) | @@ -126,14 +126,20 @@ static int virtio_console_load(QEMUFile *f, void *opaque, int version_id) | ||
126 | void *virtio_console_init(PCIBus *bus, CharDriverState *chr) | 126 | void *virtio_console_init(PCIBus *bus, CharDriverState *chr) |
127 | { | 127 | { |
128 | VirtIOConsole *s; | 128 | VirtIOConsole *s; |
129 | + PCIDevice *d; | ||
129 | 130 | ||
130 | - s = (VirtIOConsole *)virtio_init_pci(bus, "virtio-console", | 131 | + d = pci_register_device(bus, "virtio-console", sizeof(VirtIOConsole), |
132 | + -1, NULL, NULL); | ||
133 | + if (!d) | ||
134 | + return NULL; | ||
135 | + | ||
136 | + s = (VirtIOConsole *)virtio_init_pci(d, "virtio-console", | ||
131 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 137 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
132 | PCI_DEVICE_ID_VIRTIO_CONSOLE, | 138 | PCI_DEVICE_ID_VIRTIO_CONSOLE, |
133 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 139 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
134 | VIRTIO_ID_CONSOLE, | 140 | VIRTIO_ID_CONSOLE, |
135 | PCI_CLASS_DISPLAY_OTHER, 0x00, | 141 | PCI_CLASS_DISPLAY_OTHER, 0x00, |
136 | - 0, sizeof(VirtIOConsole)); | 142 | + 0); |
137 | if (s == NULL) | 143 | if (s == NULL) |
138 | return NULL; | 144 | return NULL; |
139 | 145 |
hw/virtio-net.c
@@ -585,21 +585,18 @@ static void virtio_net_cleanup(VLANClientState *vc) | @@ -585,21 +585,18 @@ static void virtio_net_cleanup(VLANClientState *vc) | ||
585 | virtio_cleanup(&n->vdev); | 585 | virtio_cleanup(&n->vdev); |
586 | } | 586 | } |
587 | 587 | ||
588 | -PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn) | 588 | +static void virtio_net_init(PCIDevice *pci_dev) |
589 | { | 589 | { |
590 | VirtIONet *n; | 590 | VirtIONet *n; |
591 | static int virtio_net_id; | 591 | static int virtio_net_id; |
592 | 592 | ||
593 | - n = (VirtIONet *)virtio_init_pci(bus, "virtio-net", | 593 | + n = (VirtIONet *)virtio_init_pci(pci_dev, "virtio-net", |
594 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 594 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
595 | PCI_DEVICE_ID_VIRTIO_NET, | 595 | PCI_DEVICE_ID_VIRTIO_NET, |
596 | PCI_VENDOR_ID_REDHAT_QUMRANET, | 596 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
597 | VIRTIO_ID_NET, | 597 | VIRTIO_ID_NET, |
598 | PCI_CLASS_NETWORK_ETHERNET, 0x00, | 598 | PCI_CLASS_NETWORK_ETHERNET, 0x00, |
599 | - sizeof(struct virtio_net_config), | ||
600 | - sizeof(VirtIONet)); | ||
601 | - if (!n) | ||
602 | - return NULL; | 599 | + sizeof(struct virtio_net_config)); |
603 | 600 | ||
604 | n->vdev.get_config = virtio_net_get_config; | 601 | n->vdev.get_config = virtio_net_get_config; |
605 | n->vdev.set_config = virtio_net_set_config; | 602 | n->vdev.set_config = virtio_net_set_config; |
@@ -610,9 +607,9 @@ PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn) | @@ -610,9 +607,9 @@ PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn) | ||
610 | n->rx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_rx); | 607 | n->rx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_rx); |
611 | n->tx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_tx); | 608 | n->tx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_tx); |
612 | n->ctrl_vq = virtio_add_queue(&n->vdev, 16, virtio_net_handle_ctrl); | 609 | n->ctrl_vq = virtio_add_queue(&n->vdev, 16, virtio_net_handle_ctrl); |
613 | - memcpy(n->mac, nd->macaddr, ETH_ALEN); | 610 | + qdev_get_macaddr(&pci_dev->qdev, n->mac); |
614 | n->status = VIRTIO_NET_S_LINK_UP; | 611 | n->status = VIRTIO_NET_S_LINK_UP; |
615 | - n->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name, | 612 | + n->vc = qdev_get_vlan_client(&pci_dev->qdev, |
616 | virtio_net_receive, | 613 | virtio_net_receive, |
617 | virtio_net_can_receive, | 614 | virtio_net_can_receive, |
618 | virtio_net_cleanup, n); | 615 | virtio_net_cleanup, n); |
@@ -631,5 +628,11 @@ PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn) | @@ -631,5 +628,11 @@ PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn) | ||
631 | 628 | ||
632 | register_savevm("virtio-net", virtio_net_id++, VIRTIO_NET_VM_VERSION, | 629 | register_savevm("virtio-net", virtio_net_id++, VIRTIO_NET_VM_VERSION, |
633 | virtio_net_save, virtio_net_load, n); | 630 | virtio_net_save, virtio_net_load, n); |
634 | - return (PCIDevice *)n; | ||
635 | } | 631 | } |
632 | + | ||
633 | +static void virtio_net_register_devices(void) | ||
634 | +{ | ||
635 | + pci_qdev_register("virtio_net", sizeof(VirtIONet), virtio_net_init); | ||
636 | +} | ||
637 | + | ||
638 | +device_init(virtio_net_register_devices) |
hw/virtio-net.h
@@ -85,8 +85,6 @@ struct virtio_net_hdr_mrg_rxbuf | @@ -85,8 +85,6 @@ struct virtio_net_hdr_mrg_rxbuf | ||
85 | uint16_t num_buffers; /* Number of merged rx buffers */ | 85 | uint16_t num_buffers; /* Number of merged rx buffers */ |
86 | }; | 86 | }; |
87 | 87 | ||
88 | -PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn); | ||
89 | - | ||
90 | /* | 88 | /* |
91 | * Control virtqueue data structures | 89 | * Control virtqueue data structures |
92 | * | 90 | * |
hw/virtio.c
@@ -757,22 +757,16 @@ void virtio_cleanup(VirtIODevice *vdev) | @@ -757,22 +757,16 @@ void virtio_cleanup(VirtIODevice *vdev) | ||
757 | qemu_free(vdev->vq); | 757 | qemu_free(vdev->vq); |
758 | } | 758 | } |
759 | 759 | ||
760 | -VirtIODevice *virtio_init_pci(PCIBus *bus, const char *name, | 760 | +VirtIODevice *virtio_init_pci(PCIDevice *pci_dev, const char *name, |
761 | uint16_t vendor, uint16_t device, | 761 | uint16_t vendor, uint16_t device, |
762 | uint16_t subvendor, uint16_t subdevice, | 762 | uint16_t subvendor, uint16_t subdevice, |
763 | uint16_t class_code, uint8_t pif, | 763 | uint16_t class_code, uint8_t pif, |
764 | - size_t config_size, size_t struct_size) | 764 | + size_t config_size) |
765 | { | 765 | { |
766 | VirtIODevice *vdev; | 766 | VirtIODevice *vdev; |
767 | - PCIDevice *pci_dev; | ||
768 | uint8_t *config; | 767 | uint8_t *config; |
769 | uint32_t size; | 768 | uint32_t size; |
770 | 769 | ||
771 | - pci_dev = pci_register_device(bus, name, struct_size, | ||
772 | - -1, NULL, NULL); | ||
773 | - if (!pci_dev) | ||
774 | - return NULL; | ||
775 | - | ||
776 | vdev = to_virtio_device(pci_dev); | 770 | vdev = to_virtio_device(pci_dev); |
777 | 771 | ||
778 | vdev->status = 0; | 772 | vdev->status = 0; |
hw/virtio.h
@@ -92,11 +92,11 @@ struct VirtIODevice | @@ -92,11 +92,11 @@ struct VirtIODevice | ||
92 | VirtQueue *vq; | 92 | VirtQueue *vq; |
93 | }; | 93 | }; |
94 | 94 | ||
95 | -VirtIODevice *virtio_init_pci(PCIBus *bus, const char *name, | 95 | +VirtIODevice *virtio_init_pci(PCIDevice *pci_dev, const char *name, |
96 | uint16_t vendor, uint16_t device, | 96 | uint16_t vendor, uint16_t device, |
97 | uint16_t subvendor, uint16_t subdevice, | 97 | uint16_t subvendor, uint16_t subdevice, |
98 | uint16_t class_code, uint8_t pif, | 98 | uint16_t class_code, uint8_t pif, |
99 | - size_t config_size, size_t struct_size); | 99 | + size_t config_size); |
100 | 100 | ||
101 | VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size, | 101 | VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size, |
102 | void (*handle_output)(VirtIODevice *, | 102 | void (*handle_output)(VirtIODevice *, |