PCI rework

Jesse Barnes jbarnes at virtuousgeek.org
Sun Apr 30 11:06:50 PDT 2006

On Sunday, April 30, 2006 5:22 am, Mark Kettenis wrote:
> Matthieu Herb, asked me to have a look at libpciaccess some time ago.
> My conclusion then was that it is too tightly bound to Linux.  It
> takes the Linux sysfs pci access interface as a model instead of the
> actual pci hardware.  I especially feel the support to map memory
> associated with the PCI BAR's does not belong in the library.  It is
> not impossible to implement the libpciaccess backend for other
> operating systems, but it would be rather awkward.

X already assumes it can mmap memory BARs, do you think it needs to 
change too?  It seems to me that the interface provided by libpciaccess 
is fairly flexible, easy to use, and easily ported to new platforms (it 
should be, it's based on the Linux internal PCI interfaces which have 
prooven highly portable).  Do you have other examples where you think 
Linux specific implementation details have crept into the interface?

> Looking at your patch I see that changes to the drivers are mostly
> changes like:
> -    *pucByte = pciReadByte(pMga->PciTag,ulOffset);
> +    pci_device_cfg_read_u8( pMga->PciInfo, pucByte, ulOffset );
> So basically this is just replacing the current interfaces with the
> equivalent libpciaccess interfaces.  Why not keep the current current
> interfaces and reimplement them to use libpciaccess in the
> Linux-specific Xorg code?

Note that the prototype is different in that it takes a full pci info 
structure rather than just a tag.  This gives arch specific 
implementations more flexibility and eases porting.

> I really don't see any major flaws in the 
> current xf86Pci.h interfaces, but I agree that some of the
> implementation could use some cleanup.

I disagree with this, the xf86Pci interface is pretty screwy:
  o X does things with PCI devices it has no business doing (e.g.
    remapping BARs)
  o the distinction between mapping domain and regular PCI memory is
    arbitrary and should be removed
  o the PCI device discovery code needed by drivers is unnecessarily
  o ROM mapping is hard to port and buggy in some cases

libpciaccess directly addresses some of the above problems and makes the 
others much easier to fix.  And its fundamental direction is correct as 
well:  X should *not* have a big PCI abstraction layer of its own, it 
should use the underlying OS via an external library for PCI related 

> Oh, and I really think you shouldn't change the coding style.  Those
> extra spaces after the the '(' are just plain ugly ;-).

Agreed. :)


More information about the xorg mailing list