Hi,
Hmm this seems to violate this rule in the spec:
The driver SHOULD use the first instance of each virtio structure type they can support.
"can support" here means that bios was able to allocate it during enumeration.
For example there could be both IO and memory, in this order you need to check that IO/memory got enabled (in theory, also that they are within parent bridge's windows - used by some guests, but seabios doesn't disable memmory/io in this strange way).
Yes, seabios always allocates both mem and io. So this incremental fix ...
@@ -234,7 +234,7 @@ void vp_init_simple(struct vp_device *vp, struct pci_device *pci) vp_cap = NULL; break; } - if (vp_cap) { + if (vp_cap && !vp_cap->cap) { vp_cap->cap = cap; vp_cap->bar = pci_config_readb(pci->bdf, cap + offsetof(struct virtio_pci_cap, bar));
... makes seabios use the first not the last and should do the trick, right?
cheers, Gerd