On Thu, Dec 24, 2009 at 06:54:55PM +0200, Gleb Natapov wrote:
On Thu, Dec 24, 2009 at 11:38:45AM -0500, Kevin O'Connor wrote:
foreachpci(bdf, max) {
if (pci_bdf_to_bus(bdf) > 0)
break;
mptable routing info should be created for each pci bus.
My read of the spec is that independent PCI buses need to be added to the MPTable, but a bus created due to a PCI-to-PCI bridge (eg, on an add-on card) need not go into the table.
See example here: http://people.freebsd.org/~fsmp/SMP/mptable/t30
In that example, it looks like the machine has two independent buses - note how bus 1 has more than four irqs - so it can't be an add-on card.
Hmm. It looks like we need to create io_bus entries dynamically for each newly discovered PCI bus.
Right now, the pciinit.c code handles neither PCI-to-PCI bridges nor independent PCI bridges. I think it would be useful to support bridges (for mapping in add-on cards that have them), but I don't know why an emulator would want to have independent buses. Note that it's difficult to detect an independent bus - some sideband mechanism is needed (eg, see CONFIG_PCI_ROOT1 in src/config.h).
-Kevin