RE: RFC: bare pci configuration access functions ?
Lee, Jung-Ik (jung-ik.lee@intel.com)
Thu, 31 Oct 2002 20:45:53 -0800
> On Thu, Oct 31, 2002 at 06:39:26PM -0800, Lee, Jung-Ik wrote:
> > 
> > Platform management, early console access, acpi, hotplug 
> io-node w/ root,...
> > pci_bus based access is useless before pci driver is initialized.
> > All exceptions will be forced to use fake structs...
> > Sounds we need to be ready to live with all exceptions here too :)
> > Or just to make them all happy with that simple bare functions.
> 
> Ok, let's make them happy with bare functions, _if_ we have 
> to.  Places
> that do not have to will be gleefully pointed out and mocked :)
> 
> > OK, if simple and pure pci config access is not possible in 
> Linux land,
> > let pci driver fake itself, not everyone else :)
> > Just export the two APIs like pci_config_{read|write}(s,b,d,f,s,v),
> > or the ones in acpi driver. Hide the fake pci_bus 
> manipulation in them. 
> > This way is way better than having everyone fake pci driver ;-)
> 
> I agree.  But can we do this for all archs?  I don't know, and look
> forward to your patch proving this will work.  Without all 
> arch support
> of this, I can't justify only exporting the functions for 
> i386 and ia64.
How about the followings ?
It's for all architecture.
thanks,
J.I.
static struct pci_bus *get_pci_bus(s, b, d, f)
{
	struct pci_bus *bus;
	struct pci_dev *dev = pci_find_slot(s, b, d+f);
	if (dev && dev->bus)
		bus = dev->bus;
	else	// dup pci_bus w/ root & set bus->number=b
		bus = get_fake_pci_bus(b);
	return bus;
}
int pci_config_{read|write}(
#ifdef WANT_PCI_BUS_PARAM
		pci_bus, 
#endif
			s, b, d, f, w, size, v)
{
	struct pci_bus *bus;
#ifdef WANT_PCI_BUS_PARAM
	if (!valid(pci_bus))	// null or invalid
#endif
	bus = get_pci_bus(s, b, d, f);
	if (!bus)
		return error;
	switch (size) {
	case byte:
		ret = pci_bus_{read|write}_##size (bus, d+f, w, v);
		break;
	...
	}
	return ret;
}
EXPORT_SYMBOL(pci_config_{read|write});
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/