libpciaccess problem with new IO interface

Adam Jackson ajax at
Thu Feb 18 10:25:44 PST 2010

On Thu, 2010-02-18 at 21:58 +1300, Michael Cree wrote:

> Thanks for that. That explains quite a bit.  Maybe I should step back to 
> explain what I am trying to solve which, in short, is to get the Xserver 
> going on old Alpha architectures that cannot do byte and word accesses 
> to I/O ports via dense memory.  There's a special sparse mapping to 
> achieve that.

I'm very very very sorry.

> I wondered whether I could use the new pci_device_open_io() routines in 
> libpciaccess, but with my testing, and your description of the PCI 
> resources on the x86, it is clear that this is not going to work.  The 
> resource at bar 2 on a radeon card, despite being used as "I/O ports", 
> is in fact a memory resource, and has to be memory mapped.

Register banks usually are, yes.

> It's easy enough to get pci_device_map_range() to map both the dense and 
> the sparse mapping on the older Alphas (I have already implemented 
> that).  The problem is getting the location of the sparse map, in 
> addition to the location of the dense map, returned back to the calling 
> video driver as pci_device_map_range() returns only one address and an 
> error code.  Somehow the address of the sparse mapping has to be made 
> available to the Xserver's MMIO_IN/OUT routines.  Any suggestions how?

I'd really rather see MMIO_IN/OUT come in a new version that takes the
map as a second parameter, rather than have some kind of global state in
the X server for "the sparse map".  You could have multiple radeons, for

- ajax
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
Url : 

More information about the xorg-devel mailing list