I'm trying to understand how the X server maps the expansion ROM to read 
the BIOS parameters.

As far as I can tell, the server temporarily maps the ROM to copy it.
If the BAR is programmed, but not enabled, the address in the BAR is used, 
otherwise the server picks an unused address at which to map it.

The problem is that on my system, the BAR is unprogrammed, and the address 
picked by the server is not in the range allocated to the host bridge.  
My system has several host bridges, and they are allocated disjoint ranges 
of MMIO space.  Each bridge responds only to host addresses within its 
range.

I think the server picks the address in getValidBIOSBase(), where it finds 
the bridge to which the adapter is connected, and finds a window in its 
preferred_mem or preferred_pmem range.  These ranges are set up in 
xf86GetPciBridgeInfo(), and as far as I can tell, they will be identical 
for all host bridges in the system.

This seems wrong to me, because I think I need to set up the 
preferred_mem/pmem range for each host bridge to reflect just the address 
range to which it responds.  There is a comment in getValidBIOSBase() that 
says "Note that this doesn't deal with host bridges yet.  But the fix for 
that belongs elsewhere."  Is this referring to my problem?  If so, where 
is "elsewhere"?

Thanks for any insight!

Bjorn
_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert

Reply via email to