[parisc-linux] RFC: I/O tree design

Grant Grundler grundler@cup.hp.com
Mon, 05 Feb 2001 23:10:56 -0800


Matthew Wilcox wrote:
...
> I was thinking along the lines of:
...
> and then use the pci_bus sysdata to point to the struct hp_device which
> is the parent of this pci_bus.

Several levels of indirection are needed here.
Currently, we only store PCI bus host adapter (eg dino or elroy)
pointer here. We need to store "per device" DMA parameters here
as well and similar cruft. ie something like:

struct pa_devinfo {
	void * pa_iommu;
	void * pa_hba;
}

((pa_sysinfo *) pci_device->sysdata)

This should work for both PCI and "PCI-like" bus devices.
pa_hba* would point to PCI bus info for dino/elroy.

> Rather than try to abuse the `parent' entry in the pci_bus.

Right. parent field can never point to anything that's not a struct pci_bus.
The reason is PCI generic code walks *up* the tree and terminates on
a NULL ptr.

> Yeah, I was thinking about that.  In some of the larger systems (say,
> N class), there's no real central point at which to base the bus walk,
> other than the Stretch memory controller.

Two comments:
1) IMHO N-class really isn't that big.
2) It does have a "central bus" (Merced). Actually two of them but they
   are peers and for most cases look like one.

grant

Grant Grundler
parisc-linux {PCI|IOMMU|SMP} hacker
+1.408.447.7253