On 13/12/2012 09:24, KONRAD Frédéric wrote:
On 12/12/2012 15:25, Peter Maydell wrote:
On 10 December 2012 16:45, <fred.kon...@greensocs.com> wrote:
-static void virtio_blk_class_init(ObjectClass *klass, void *data)
-{
- DeviceClass *dc = DEVICE_CLASS(klass);
- PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
-
- k->init = virtio_blk_init_pci;
- k->exit = virtio_blk_exit_pci;
- k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
- k->device_id = PCI_DEVICE_ID_VIRTIO_BLOCK;
- k->revision = VIRTIO_PCI_ABI_VERSION;
- k->class_id = PCI_CLASS_STORAGE_SCSI;
- dc->reset = virtio_pci_reset;
- dc->props = virtio_blk_properties;
-}
This hunk removes the setting of the PCI vendor and device IDs
but I can't see where they are set in the new code.
How will the PCI transport's PCI vendor/device/class IDs be
set (a) when a virtio-blk backend is created and separately
plugged into a virtio-pci transport (b) for the legacy
virtio-pci-blk? [ideally the answer to (b) should be "in the
same way as for (a)"]
-- PMM
It's done in the virtio_pci_device_plugged(), ( step 4 )
At this time we have the device ID, so we can put the PCI IDs :
+static void virtio_pci_device_plugged(void *opaque)
+{
+ VirtIOPCIProxy *proxy = VIRTIO_PCI(opaque);
+ uint8_t *config;
+ uint32_t size;
+
+ /* Put the PCI IDs */
+ switch (get_virtio_device_id(proxy->bus)) {
+
+ case VIRTIO_ID_BLOCK:
+ pci_config_set_device_id(proxy->pci_dev.config,
+ PCI_DEVICE_ID_VIRTIO_BLOCK);
+ pci_config_set_class(proxy->pci_dev.config,
PCI_CLASS_STORAGE_SCSI);
+ break;
+ default:
+ error_report("unknown device id\n");
+ break;
+
+ }
I'll move the "case" to the step 7 as it should be.
I meant step 6* : Add the virtio-blk device.
the virtio-blk-pci set the PCI IDs on the same way as for virtio-blk.
Fred